我有2个实体:用户和位置。
namespace mk\MyBundle\Entity;
use mk\MyBundle\Entity\Location;
class User
{
protected $user_id;
protected $first_name;
protected $last_name;
protected $location;
}
和
namespace mk\MyBundle\Entity;
class Location
{
public $country_id;
public $country_name;
public $state_id;
public $state_name;
public $city_id;
public $city_name;
}
我将用户的位置作为位置对象存储在适当的变量中。
在配置文件编辑页面中,我准备了FormType类UserType,其中使用嵌套对象调用显示位置:
$builder->add('location.country_id', 'country')
当我使用普通{{form_rest(form)}}时,一切都还可以,但是当我想直接解决这些问题时,例如:
{{ form_widget(form.location.country_id) }}
Twig抛出一个错误:对象“Symfony \ Component \ Form \ FormView”的方法“位置”在MyBundle中不存在:用户:profile.html.twig第69行
我做错了什么? 提前谢谢。
更新
答案 0 :(得分:1)
它失败了,因为您正在为对象FormView调用方法“location”。但是你想从表单中调用一个方法。
你应该试试
{{ form_widget(form.location.country_id) }}
希望它的工作:)
答案 1 :(得分:0)
也许你在此期间找到了解决方案,但是让我回答这个问题,以便将来参考以帮助他人。
我似乎不清楚您使用的是哪个版本的symfony2,但我的解决方案应该适用于Symfony 2.0。
首先,包含.
的表单字段名称在symfony2中是非法的。
The name "location.id" contains illegal characters. Names should start with a letter, digit or underscore and only contain letters, digits, numbers, underscores ("_"), hyphens ("-") and colons (":").
请这样做:在XType :: buildForm(...)函数中使用property_path
option。
$builder->add('this_is_a_valid_name_you_can_choose',
'text', // yourtype
array(
'property_path' => 'location.country_id',
));
这应该可以解决问题,并且您的字段可以在{{ form_widget(this_is_a_valid_name_you_can_choose) }}
。
对于旧版本,我看到有些人使用path
选项,但我从未发现此文档。