Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 在细枝模板中呈现用户定义的筛选器类型时出现问题_Symfony_Twig_Symfony Forms - Fatal编程技术网

Symfony 在细枝模板中呈现用户定义的筛选器类型时出现问题

Symfony 在细枝模板中呈现用户定义的筛选器类型时出现问题,symfony,twig,symfony-forms,Symfony,Twig,Symfony Forms,使用LexikFilterBundle类型,我在主窗体上创建了一个子窗体,以便: ->add('adressData', CollectionAdapterFilterType::class, array( 'entry_type' => AddressFilterType::class, 'add_shared' => function (FilterBuilderExecuterInterface $qbe) {

使用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()这样的方法例如,当我将主窗体的AddressData和AdminAddressData组件传递给包含模板时,我完全不知道如何访问这些字段

{# @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>

我不知道为什么,因为应该只有一个表单。

我不知道
LexikFormFilterBundle
,但它看起来像
form.addressdata
,您要传递给
filter.html.twig
as
address
变量是
CollectionAdapterFilterType
的实例,而不是
AddressFilterType
我想。我正在使用Idea/PHPStorm。你能告诉我如何调试细枝模板中的内容吗?只需使用dump()?dump()显示两个FormView并扩展传递的第一个表单:FormView{3827▼ +变量:数组:24[▶] +父对象:FormView{#2509▶} +子:数组:1[▼ 0=>FormView{#3836▼ +变量:数组:24[▶] +父级:FormView{#3827}+子级:数组:3[▼ “街道”=>FormView{#3840▶} “城市”=>FormView{#3843▶} “国家”=>FormView{#3845▶} ] -rendered:false}]-rendered:false}所以,多亏了你的提示,我只传入了adressData[0]。我不知道为什么会这样,但现在它可以工作了。谢谢你。这是因为
CollectionAdapterFilterType
处理了
条目类型的集合,而您的情况就是
AddressFilterType
{% embed ":addressdata/forms:filter.html.twig" with{"address":form.adressData[0]} %}{%  endembed %}