【问题标题】:Access form.vars.value in Symfony subform using Twig使用 Twig 在 Symfony 子表单中访问 form.vars.value
【发布时间】:2016-08-04 14:23:31
【问题描述】:

我正在开发 Symfony 2.7 WebApp,我想为其中一个实体使用自定义表单小部件。小部件需要访问form.vars.value。只要 Widget 在主窗体中使用,它就可以正常工作。但是在子窗体中使用 Widget 时,form.vars.value 为空。

表单中使用的类:

class AdressBookEntry { 
    // The main phone number of this contact: Type PhoneNumber
    protected $mainPhoneNumber;
    //...getter and setter for mainPhoneNumber

    // An array of Addresses
    protected $addresses;
    //...getter and setter for addresses

    ...
}

class Address { 
    // The phone number of this address: Type PhoneNumber
    protected $phoneNumber;
    //...getter and setter for phoneNumber

    ...
}

class PhoneNumber {
    ...
}

这些类的自定义表单类型:

// Custom FormType for AddressBookEntries
class AdressBookEntryType extends AbstractType {
    ...

    public function buildForm(FormBuilderInterface $builder, array $options) {  
        // Type 'phone_number_edit' is registered in services.yml
        $builder
            ->add('mainPhoneNumber', 'phone_number_edit', array(
                'label' => '...',
                ... 
            ))  

            ->add('addresses', 'collection', array(
                'label' => '...',
                ... 
            ));
    }
}


// Custom FormType for Address
class AddressType extends AbstractType {
    ...

    public function buildForm(FormBuilderInterface $builder, array $options) {  
        $builder
            ->add('mainPhoneNumber', 'phone_number_edit', array(
                'label' => '...',
                ... 
            ))  

            ...;
    }
}

PhoneNumberEdit 的自定义小部件

{% block phone_number_edit_widget %}
    ...
    {{ dump(form.vars.value) }}
    ...

主窗体(代表AddressBookEntry)的PhoneNumberEdit 工作正常。 dump 语句显示分配的PhoneNumber 对象的内容。

但是,在 addresses 集合的子表单中,form.vars.value 变量为空。转储只显示""

那么,如何在子表单中访问form.vars.value?小部件如何识别它是在主窗体还是子窗体中使用?

更新:

cmets 中询问的一些附加信息:

@Jeet:如前所述,转储显示一个空值/字符串:""

@DOZ:这是 Twig 代码:

{{ form_start(form) }}
    {{ form_errors(form) }}         
    {{ form_row(form.name) }}

    {{ form_widget(mainPhoneNumber) }}

    <ul data-prototype"{{ _self.addressItem(form.addresses.vars.prototype)|e('html_attr') }}" >
        {% for address in form.addresses %}
            {{ _self.addressItem(address) }}
        {% endfor %}
    </u>

    ...
{{ form_end(form) }}

{% macro addressItem(address) %}
    <li>
        {{ form_widget(address.phoneNumber) }}
        ...
    </li>
{% endmacro %}  

【问题讨论】:

  • 你能告诉我你在子表单中转储 form.vars.value 的代码吗? (带有您调用表单的所有代码的树枝模板)
  • 你从{{ dump(form.vars.data) }}得到什么?

标签: forms symfony twig


【解决方案1】:

使用 value 代替 form.vars.value

{% block phone_number_edit_widget %}
    ...
    {{ dump(value) }}
    ...

【讨论】:

  • 不幸的是,这也不起作用。结果是一样的:子表单中的dump 只显示""
猜你喜欢
  • 2015-11-20
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 2016-11-29
相关资源
最近更新 更多