0

Doctrine で Symfony 1.2 を使用しています。2 つの言語に翻訳された Place モデルがあります。この Place モデルには、ネストされたセットの動作もあります。

別のノードに属する新しい場所を作成する際に問題が発生しています。2 つのオプションを試しましたが、どちらも失敗します。

1 オプション

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

フォームをマージすると、place_id フィールド ID の値が配列になります。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が定義されていません。したがって、重複レコードになることはありません(一意のキー(id、lang)があります)

何が起こっている可能性がありますか?

ありがとう!

4

1 に答える 1

0

あなたが抱えている問題は、フォームを相互に埋め込むことに関連しているようですが、これには注意が必要です。親フォームのupdateObject/bindメソッドで何かを実行して、その値を子フォームに正しく渡す必要があります。

この記事は読む価値があります:

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

これは、フォームの埋め込み(およびマージ)がどのように機能するかについてのいくつかの良い情報を提供します。この記事で使用されている手法はおそらくうまくいくでしょうが、私は以前にsfでI18nを使用したことがないので、よりエレガントなソリューションが組み込まれている可能性がありますか?

于 2009-11-08T15:17:23.523 に答える