我正在使用带有Doctrine的Symfony 1.2。我有一个Place模型,翻译成两种语言。此Place模型还具有嵌套集行为。
我现在遇到了创建属于另一个节点的新地方的问题。我尝试了两种选择,但都失败了:
1个选项
$this->mergeForm(new PlaceTranslationForm($this->object->Translation[$lang->getCurrentCulture()]));
如果我合并表单,会发生什么是place_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))
知道会发生什么事吗?
谢谢!
答案 0 :(得分:0)
看起来您遇到的问题与将表单嵌入到彼此之间有关,这可能很棘手。您可能需要在父窗体的updateObject / bind方法中执行操作,以使其正确地将其值传递给其子窗体。
本文值得一读:
http://www.blogs.uni-osnabrueck.de/rotapken/2009/03/13/symfony-merge-embedded-form/comment-page-1/
它提供了一些关于嵌入(和合并)表单如何工作的好信息。本文使用的技术可能对您有用,但之前我没有在sf中使用I18n,所以很可能内置了更优雅的解决方案?