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 がエラーをスローします: オブジェクト "Symfony\Component\Form\FormView" のメソッド "location" が MyBundle:User:profile.html.twig 行 69 に存在しません

私が間違っていることは何ですか?前もって感謝します。

更新しました

4

2 に答える 2

1

オブジェクト FormView のメソッド「location」を呼び出しているため、失敗しています。しかし、フォームからメソッドを呼び出したいとします。

試してみてください

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

それがうまくいくことを願っています:)

于 2012-10-15T14:39:40.813 に答える
0

Perhaps you found a solution in the meantime, but let me answer this for future reference to help others.

It seems unclear to me which version of symfony2 you are using, but my solution should work for Symfony 2.0 upwards.

First, a form field name containing . is illegal in 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 (":"). 

Do it this way instead: in your XType::buildForm(...) function use the property_path option.

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

This should do the trick, and your field is accessible in twig by {{ form_widget(this_is_a_valid_name_you_can_choose) }}.

For older releases I have seen some people use a path option, but I never found this documented.

于 2013-04-30T17:13:02.060 に答える