我使用Symfony 3.2 ,在formType中使用choice_value
时出现此错误:
Error: Call to a member function getSlug() on a non-object" at D:\wamp\www\my_project\src\AppBundle\Form\Bien\BienType.php line 77
use AppBundle\Entity\Ville;
//...
->add('ville', EntityType::class, array(
'class' => 'AppBundle:Ville',
'label' => 'Ville',
'choice_label' => 'nom',
'placeholder' => 'Ville ',
'multiple' => false,
'expanded' => false,
'choice_value' => function ($ville) {
/** @var Ville $ville */
return $ville->getSlug();
},
))
我在Symfony 3.1 的另一个项目中使用了相同的代码,它运行良好,问题来自Symfony版本吗?
修改
我已使用choice_label
对其进行了测试,并且没有任何错误正常工作:
'choice_label' => function ($ville) {
/** @var Ville $ville */
return $ville->getSlug();
},
编辑2:
今天我已经安装了Symfony 3.1并且我测试了choice_value
并且我得到了相同的错误但是几个月前安装的ancien Symfony3.1没有错误。
我认为Symfony上有一些更新并导致错误,是否可能?
答案 0 :(得分:1)
(自2.7起)choice_value
选项也被to transform the initial data to string value使用,即如果你传递一个闭包函数,你也可以控制初始数据转换,如果它是null
,你需要先检查一下才能拨打$ville->getSlug()
:
'choice_value' => function (Ville $ville = null) {
return $ville ? $ville->getSlug() : '';
},
在这种情况下,typehint很好,您有一个签名约束和IDE自动完成,但是您需要设置默认null
以避免null
初始数据的类型提示异常。
我认为应该记录下来,因为开发人员希望(与其他choice_*
一样)只处理'choices'
选项。
答案 1 :(得分:0)
解决:
现在使用这样的方法很好:
'choice_value' => function ($ville) {
/** @var Ville $ville */
return $ville ? $ville->getSlug() : '';
},
或者像这样:
'choice_value' => function (Ville $ville = null) {
return $ville ? $ville->getSlug() : '';
},