2009-11-08 3 views
0

Я использую Symfony 1.2 с доктриной. У меня есть модель Place с переводами на двух языках. Эта модель Place также имеет поведение вложенного набора.Symfony: перевод модели + вложенный набор

У меня возникли проблемы с созданием нового места, которое принадлежит другому узлу. Я попробовал два варианта, но оба из них не:

1 вариант

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

Если я сливаю форму, что происходит в том, что значение place_id поля идентификатора массива. Полагаю, это потому, что он ждет реального объекта с идентификатором. Если я попытаюсь установить place_id = '', появится еще одна ошибка.

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 
} 
} 

Теперь ошибка:

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

Глядя на SQL, идентификатор не определен; поэтому у меня нет уникального ключа (id, lang))

Любая идея о том, что может произойти?

спасибо!

+0

Я обнаружил, что с решением nº1 symfony пытается сохранить place_translation перед местом, поэтому есть ошибка, потому что у него нет идентификатора ... Мне все еще нужно найти решение для этого – fesja

ответ

0

Похоже, что проблемы, которые возникают у вас, связаны с встраиванием форм внутри друг друга, что может быть сложно. Вероятно, вам нужно будет что-то делать в методах updateObject/bind родительской формы, чтобы заставить ее правильно передать свои значения своим дочерним формам.

Эта статья стоит читать:

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

Это дает некоторую хорошую информацию о том, как вложение (и mergeing) образует работу. Метод, который использует статья, вероятно, сработает для вас, но я раньше не использовал I18n в sf, так что вполне возможно, что в нем есть более элегантное решение?