Symfony2 twig表单失败,嵌套对象

时间:2012-10-15 14:04:32

标签: php symfony twig

我有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行

我做错了什么? 提前谢谢。

更新

2 个答案:

答案 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选项,但我从未发现此文档。