THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Hello!

Je continue doucement mes modifications sur le module d'import depuis T1 mais du coup j'ai besoin de développer d'autres modules qui y seront connectés pour rapatrier plus de données. (infosupclient, infosupcommande, infosuprubrique, ...)

Donc là, je suis sur mon nouveau module "AdditionalCategoryField" (infosuprubrique).
J'ai plus ou moins tout fait correctement mais à l'enregistrement des mes champs, ça s'enregistre en "en_US" au lieu de "fr_FR".

Mon schema.xml

<table name="additional_category_field" namespace="AdditionalCategoryField\Model">
	<column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
	<column name="visible" required="true" type="INTEGER" default="0" />
	<column name="position" required="true" type="INTEGER" default="NULL" />
	<column name="affect_childs" required="true" type="BOOLEAN" default="1" />
	<column name="title" size="255" type="VARCHAR" />
	<column name="description" type="CLOB" />
	<column name="chapo" type="LONGVARCHAR" />
	<column name="postscriptum" type="LONGVARCHAR" />
	<behavior name="timestampable" />
	<behavior name="i18n">
		<parameter name="i18n_columns" value="title, description, chapo, postscriptum" />
	</behavior>
</table>

Mon form :

protected function buildForm(): void
{
	$this->formBuilder
		->add(
			'title',
			TextType::class,
			[
			'constraints' => [
				new NotBlank(),
			],
			'label' => Translator::getInstance()->trans('Title *', [], AdditionalCategoryField::DOMAIN_NAME),
			'label_attr' => [
				'for' => 'title',
			], ]
		)
		->add(
			'locale',
			TextType::class,
			[
			'constraints' => [
				new NotBlank(),
			], ]
		)
		->add(
			'affect_childs',
			CheckboxType::class,
			[
			'label' => Translator::getInstance()->trans('Affect category field value to all categories childs', [], AdditionalCategoryField::DOMAIN_NAME),
			'label_attr' => [
				'for' => 'affect_childs',
			], ]
		)
	;
}

Mon controller :

public function createAction()
{
	if (null !== $response = $this->checkAuth(self::RESOURCE_CODE, array(), AccessManager::CREATE)) {
		return $response;
	}

	$creationForm = $this->createForm(AdditionalCategoryFieldCreationForm::getName());

	$errorMessage = null;

	$locale = $this->getCurrentEditionLocale(); //donne bien fr_FR

	try {
		$form = $this->validateForm($creationForm);
		$data = $form->getData();
		$addCatField = (new AdditionalCategoryField())
			->setTitle($data['title'])
			->setLocale($data['locale']) //donne bien fr_FR
			->setAffectChilds($data['affect_childs'])
			->save();
		
		$this->getParserContext()->set("success", true);
		
		return $this->render(
			'AdditionalCategoryField-edit',
			[
					'additional_category_field_id' => $addCatField,
					/* 'featureav_order' => $this->getFeatureAvListOrder(), */
			]
		);

	} catch (FormValidationException $ex) {
		$errorMessage = $this->createStandardFormValidationErrorMessage($ex);
	} catch (\Exception $ex) {
		$errorMessage = $this->getTranslator()->trans('Sorry, an error occurred: %err', ['%err' => $ex->getMessage()], 'additionalcategoryfield.bo.default', $locale);
	}

	if (null !== $errorMessage) {
		$creationForm->setErrorMessage($errorMessage);

		$this->getParserContext()
			->addForm($creationForm)
			->setGeneralError($errorMessage)
		;
	} else {
		$this->setupFormErrorContext(
		   $this->getTranslator()->trans('%obj creation', ['%obj' => 'AdditionalCategoryField'], 'additionalcategoryfield.bo.default', $locale),
			$errorMessage,
			$creationForm,
			$ex
		);
	}
	return $this->render('AdditionalCategoryField', ['order' => $this->getRequest()->get('order')]);

}

Une idée d'où ça pourrait venir?

Je galère aussi avec la fonction generateRedirectFromRoute qui me renvoie une erreur

The "router.AdditionalCategoryField" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.

Last edited by Elyos (23-03-2023 10:08:50)


Aide les autres, ils t'aideront en retour.

Offline


Pour mon souci de generateRedirectFromRoute, j'ai "contourné" le souci.... j'ai vu sur Github que certains modules ont été modifié à ce niveau là :

return $this->generateRedirect(
	URL::getInstance()->absoluteUrl(
		'/admin/module/AdditionalCategoryField',
		['order' => $this->getRequest()->get('order')]
	)
);

Reste le souci de langue (problème initial)


Aide les autres, ils t'aideront en retour.

Offline


Quel boulet... faut mettre setLocale en premier...

$addCatField->setLocale($data['locale'])
	->setTitle($data['title'])
	->setAffectChilds($data['affect_childs'])
	->save();

Last edited by Elyos (23-03-2023 10:10:28)


Aide les autres, ils t'aideront en retour.