bonjour,
je souhaite stocker dans ma base de données une table qui correspond à mes menus, il y a une paternité et du multilangue.
j'ai donc rajouté les behavior nestedset et i18n pour tout simplifier.
j'ai le schéma suivant:
le name est un nom de référence pour le listing dans le backoffice, le name_menu sera visible par l'utilisateur et est donc internationnalizé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Menu: tableName: menu actAs: NestedSet: hasManyRoots: true rootColumnName: root_id I18n: tableName: menu_translation fields: [name_menu, is_activated] columns: name: { type: string(255) } name_menu: { type: string(255) } is_activated: { type: boolean, notnull: true, default: true }
pour la gestion du nestedset dans le back office j'utilise la mise en place via Jquery (http://redotheoffice.com/?p=74, http://www.lexik.fr/sfblog/?p=135).
dans mon MenuForm.class.php j'ai donc:
et là c'est le drame.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public function configure() { unset($this['root_id'], $this['lft'], $this['rgt'], $this['level']); $this->widgetSchema['parent_id'] = new sfWidgetFormDoctrineChoice(array( 'model' => 'menu', 'add_empty' => '~ (object is at root level)', 'order_by' => array('root_id, lft',''), 'method' => 'getIndentedName' )); $this->validatorSchema['parent_id'] = new sfValidatorDoctrineChoice(array( 'required' => false, 'model' => 'Menu' )); $this->setDefault('parent_id', $this->object->getParentId()); $this->widgetSchema->setLabel('parent_id', 'Child of'); $this->embedI18n(array('en', 'fr')); $this->widgetSchema->setLabel('en', 'English'); $this->widgetSchema->setLabel('fr', 'French'); }
en voulant créer le widget parent_id, une requete est faite a la BDD avec un select name, name_menu, is_activated FROM MENU .... Or, les champs name_menu et is_activated ne sont pas dans cette table mais bien dans la table menu_translation (remember i18n). DONC ça plante en disant "column name_menu" doesn't exist..
bref j'ai testé plein de truc et , dans mon Menu.class.php , si je surcharge la method setTableDefinition en enlevant les champs qui posent pb, j'otbiens:
là tout marche nickel (nestedset et i18n) SAUF quand je fais un doctrine:build_all_reload, mes champs name_menu et is_activated ne sont pas regénérés dans ma BDD, normal...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public function setTableDefinition() { $this->setTableName('menu'); $this->hasColumn('name', 'string', 255, array('type' => 'string', 'length' => '255')); }
quelqu'un aurait-il une idée?
Partager