1

我有 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 向我抛出一个错误:MyBundle:User:profile.html.twig 中的对象“Symfony\Component\Form\FormView”的方法“位置”在第 69 行不存在

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

更新

4

2 回答 2

1

它失败了,因为您正在为对象 FormView 调用方法“位置”。但是你想从你的表单中调用一个方法。

你应该试试

{{ form_widget(form.location.country_id) }}

希望它的工作:)

于 2012-10-15T14:39:40.813 回答
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_pathoption

$builder->add('this_is_a_valid_name_you_can_choose',
              'text', // yourtype
              array(
                  'property_path' => 'location.country_id',
              ));

这应该可以解决问题,并且您的字段可以在 twig by 中访问{{ form_widget(this_is_a_valid_name_you_can_choose) }}

对于较旧的版本,我看到有些人使用一个path选项,但我从来没有发现这个记录。

于 2013-04-30T17:13:02.060 回答