2009-11-08 7 views
0

나는 Symfony 1.2를 Doctrine과 함께 사용하고 있습니다. 두 언어로 번역 된 Place 모델이 있습니다. 이 장소 모델에는 중첩 된 세트 비헤이비어가 있습니다.Symfony : 모델 번역 + 중첩 세트

다른 노드에 속한 새 장소를 만드는 데 문제가 있습니다. 나는 두 가지 옵션을 시도했지만 둘 다 실패 : 나는 양식을 병합하는 경우

1 옵션

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

, 무슨 일이라는 place_id 필드 ID 배열의 값입니다. 나는 이드가있는 실제 물건을 기다리고 있기 때문이라고 생각합니다. place_id = ''을 (를) 설정하려고하면 다른 오류가 발생합니다.

이 옵션은 이제 오류가

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

다음 SQL을 보면

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

는 ID가 정의되지 않은; 그래서 그것은 중복 레코드가 될 수 없습니다. (고유 키 (id, lang)이 있습니다)

어떤 일이 벌어 질 수 있습니까?

감사합니다.

+0

솔루션 nº1에서 심포니가 장소 이전에 place_translation을 저장하려고 시도 했으므로 ID가 없으므로 오류가 있습니다 ...이 문제에 대한 해결책을 찾아야합니다. – fesja

답변

0

당신이 가지고있는 문제가 서로간에 폼을 포함시키는 것과 관련이있는 것처럼 보입니다. 까다로울 수 있습니다. 부모 폼의 updateObject/bind 메소드에서 값을 자식 폼으로 올바르게 전달할 수 있도록해야 할 가능성이 높습니다.

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

그것은 포함 (및 mergeing) 작업을 형성하는 방법에 대한 몇 가지 좋은 정보를 제공합니다

이 문서 읽기 가치가있다. 기사가 사용하는 기술은 아마 당신을 위해 일할 것입니다,하지만 sf에서 I18n을 사용하지 않았습니다. 그래서 더 우아한 솔루션이 내장되어있을 수 있습니까?