2009-11-08 10 views
0

J'utilise Symfony 1.2 avec Doctrine. J'ai un modèle Place avec des traductions en deux langues. Ce modèle Place a également un comportement d'ensemble imbriqué.Symfony: Modèle de traduction + ensemble imbriqué

Je rencontre des problèmes en créant un nouvel emplacement qui appartient à un autre nœud. J'ai essayé deux options, mais les deux Fail:

option 1

$this->mergeForm(new PlaceTranslationForm($this->object->Translation[$lang->getCurrentCulture()])); 

Si je fusionne la forme, ce qui se passe est que la valeur du champ id place_id un tableau. Je suppose que c'est parce qu'il attend un objet réel avec un identifiant. Si j'essaie de mettre place_id = '' il y a une autre erreur.

option 2

$this->mergeI18n(array($lang->getCurrentCulture())); 

public function mergeI18n($cultures, $decorator = null) 
{ 
if (!$this->isI18n()) 
{ 
     throw new sfException(sprintf('The model "%s" is not internationalized.', $this->getModelName())); 
} 

$class = $this->getI18nFormClass(); 
foreach ($cultures as $culture) 
{ 
     $i18nObject = $this->object->Translation[$culture]; 
     $i18n = new $class($i18nObject); 
     unset($i18n['id']); 
     $i18n->widgetSchema['lang'] = new sfWidgetFormInputHidden(); 

     $this->mergeForm($i18n); // pass $culture too 
} 
} 

Maintenant, l'erreur est:

Couldn't hydrate. Found non-unique key mapping named 'lang'. 

En regardant le sql, l'identifiant n'est pas défini; donc il ne peut pas être un enregistrement en double (j'ai une clé unique (id, lang))

Une idée de ce qui peut arriver?

merci!

+0

J'ai détecté qu'avec la solution nº1, symfony essaie d'enregistrer place_translation avant le lieu, donc il y a une erreur car il n'a pas d'identifiant ... Je dois encore trouver la solution à cette question – fesja

Répondre

0

Il semble que les problèmes que vous rencontrez sont liés à l'intégration de formulaires les uns dans les autres, ce qui peut être difficile. Vous aurez probablement besoin de faire des choses dans les méthodes updateObject/bind du formulaire parent pour l'amener à transmettre ses valeurs correctement à ses formes enfants.

Cet article est intéressant à lire:

http://www.blogs.uni-osnabrueck.de/rotapken/2009/03/13/symfony-merge-embedded-form/comment-page-1/

Il donne de bonnes informations sur la façon dont l'intégration (et mergeing) forme de travail. La technique que l'article utilise fonctionnera probablement pour vous, mais je n'ai pas utilisé I18n dans sf avant, donc il se pourrait bien qu'il y ait une solution plus élégante intégrée?

Questions connexes