Jos*_*osh 3 scaffolding symfony
如果你使用Symfony2的生成器从数据库实体创建CRUD表单,你可能会在"创建新记录"屏幕上出现这样的错误:
StringCastException: A "__toString()" method was not found on the objects of type
"ScrumBoard\ServiceBundle\Entity\Users" passed to the choice field. To read a
custom getter instead, set the option "property" to the desired property path.
Run Code Online (Sandbox Code Playgroud)
如果我正确地读到这个,问题是它需要显示我正在创建的记录的用户下拉列表,但它不知道如何将"用户"实体变成字符串.
在我的Users实体类上定义__toString()方法可以解决问题.但是,我可以从错误消息的文本中看到有一个替代方案:改为读取一个客户获取器,这是通过"[设置]选项"属性"到所需的属性路径"来完成的.
这听起来像某种注释.但在我的搜索中,我无法弄清楚那是什么.因为我想彻底了解Symfony2 - 有人可以帮助我吗?
谢谢!
Nic*_*ich 11
在表单中创建实体(选择的超类)字段类型时.您需要指定哪个属性将用于标签/值,否则将使用底层对象的__toString()方法.
$builder->add('users', 'entity', array(
'class' => 'AcmeHelloBundle:User',
'property' => 'username',
));
Run Code Online (Sandbox Code Playgroud)
在实体字段类型的表单类型参考中阅读有关它的更多信息.
附加信息
在模板中生成路径时,__toString()相关的错误通常通常来自树枝.如果使用{{object}}输出一个对象在树枝中的对象... twig将调用对象的'__toString方法.这个"技巧"由使用SensioGeneratorBundle的crud生成的模板使用.
{{ path('article_show', {'id': article}) }}
Run Code Online (Sandbox Code Playgroud)
路线是这样的:
article_show:
pattern: /article/{id}
defaults: { _controller: AcmeArticleBundle:Article:show }
Run Code Online (Sandbox Code Playgroud)
如果您的Article实体中的__toString方法设置为类似...
public function __toString()
{
return $this->id;
}
Run Code Online (Sandbox Code Playgroud)
......你不需要打字
{{ path('article_show', {'id': article.id) }}
Run Code Online (Sandbox Code Playgroud)
通常,如果使用,Twig将自动输出Article :: getId()
{{ article.id }}
Run Code Online (Sandbox Code Playgroud)
希望这能澄清你的发现.
| 归档时间: |
|
| 查看次数: |
7019 次 |
| 最近记录: |