渲染用户时出现问题在树枝模板中定义过滤器类型

时间:2017-06-23 11:09:19

标签: symfony twig symfony-forms

使用LexikFilterBundle类型我在主窗体上创建一个子窗体,所以:

    ->add('adressData', CollectionAdapterFilterType::class, array(
        'entry_type' => AddressFilterType::class,
        'add_shared' => function (FilterBuilderExecuterInterface $qbe) {
            $qbe->addOnce($qbe->getAlias() . '.adressData', 'a');
        },
        'label' => 'person.address',
    ))

我的AddressFilterType是这样定义的:

// EyeColorFilterType.php
namespace AppBundle\Filter;


use AppBundle\Entity\AdressData;
use AppBundle\Entity\Country;
use AppBundle\Repository\AddressRepository;
use AppBundle\Repository\CountryRepository;
use AppBundle\Repository\EyeColourRepository;
use Lexik\Bundle\FormFilterBundle\Filter\FilterOperands;
use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\TextFilterType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CountryType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Lexik\Bundle\FormFilterBundle\Filter\Form\Type as Filters;


class AddressFilterType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('street', TextFilterType::class, [
                'condition_pattern' => FilterOperands::STRING_CONTAINS])
            ->add('city', TextFilterType::class, [
                'condition_pattern' => FilterOperands::STRING_CONTAINS])
            ->add("country", CountryType::class, [
                'required' => false,
                'multiple' => true,
                'attr' => [
                    "class" => "countryselect2",
                ],
                'placeholder' => 'address.choosecountry',
                'label' => "address.country",
                'translation_domain' => "address",
            ]);

    }

    public function getBlockPrefix()
    {
        return 'address_filter';
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => AdressData::class,
            'translation_domain' => 'address'
        ));
    }

    // this allow us to use the "add_shared" option
    public function getParent()
    {
        return Filters\SharedableFilterType::class;
    }
}

现在在我的模板模板中,我将AddressFilterType传递给:

                        {% embed ":addressdata/forms:filter.html.twig" with{"address":form.adressData} %}{%  endembed %}

如果我然后简单地调用form_row(addressdata)就行了(城市,街道和国家都按照上面显示的AddressFilterType中的定义进行渲染。但是如果我自己尝试渲染字段就会失败。为什么会这样?说没有这样的方法以getCountry()为例。当我将主窗体的adressData和adminAdressData组件传递给包含模板时,对于如何访问这些字段感到困惑。

{# @var address \AppBundle\Entity\AdressData #}
{#{{ form_row(address) }}#}
<div class=" row">
    <div class="col-sm-6">
            {{ form_row(address.country) }}
    </div>
    <div class="col-sm-6">
            {{ form_row(address.city) }}
    </div>
</div>
<div class=" row">
        {{ form_row(address.street) }}
</div>

POST EDIT:

解决方案是

{% embed ":addressdata/forms:filter.html.twig" with{"address":form.adressData[0]} %}{%  endembed %}

我不知道为什么因为只有一个表格。

0 个答案:

没有答案