Пустое поле даты Symfony не требуется для виджета single_text

Я создал форму с полем даты, используя виджет single_text. Я выбрал этот вариант, потому что я использую Bootstrap datepicker

У меня проблема в том, что поле всегда заполнено текущей датой, а не пустым.

В соответствии с этим он должен работать, если я установил значение false, но id - нет. Я попытался установить empty_value для пустой строки, то же самое для данных, но в первом случае ничего не произошло, вероятно, потому что эта опция для полей выбора. Во втором случае я получаю исключение "Ожидаемый аргумент типа"\DateTime", " строка "с учетом"

Я пытался использовать DataTransformer, но ничего не изменилось. Я обнаружил, что для полей данных значение всегда проходит через DateTimeToLocalizedStringTransformer и, если я правильно понимаю, оно возвращает пустую строку, если пустое значение, так что проблема где-то еще после преобразователей данных.

Еще одна вещь, которую я попытался установить значение с помощью массива attr, но, к сожалению, побочным эффектом было то, что заполнение формы некоторыми значениями не влияет на поле даты.

Есть ли способ установить значение по умолчанию для поля данных как пустое с виджетом single_text?

Здесь идет код

<?php

namespace Psw\AdminBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Doctrine\ORM\EntityRepository;
use Psw\AdminBundle\Form\DataTransformer\EmptyDateTransformer;
use Psw\AdminBundle\Form\DataTransformer\EmptyDateViewTransformer;

class OrdersFilterType extends AbstractType
{
    private $admin;

    public function __construct($admin=false) {
        $this->admin = $admin;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('client', 'entity', array(
                'class' => 'PswAdminBundle:User',
                'required' => false,
                'multiple' => false,
                'label'     => 'orders.client',
                'empty_value' => 'orders.allclients',
                'query_builder' => function(EntityRepository $er) {
                    $qb = $er->createQueryBuilder('u');
                    return $qb->where($qb->expr()->like('u.roles', '?0'))
                        ->setParameters(array('%ROLE_CLIENT%'));
                }
            ));
        if($this->admin) {
            $builder->add('staff', 'entity', array(
                'class' => 'PswAdminBundle:User',
                'required' => false,
                'multiple' => false,
                'label'     => 'orders.staff',
                'empty_value' => 'orders.allStaff',
                'query_builder' => function(EntityRepository $er) {
                    $qb = $er->createQueryBuilder('u');
                    return $qb->where($qb->expr()->like('u.roles', '?0'))
                              ->orWhere($qb->expr()->like('u.roles', '?1'))
                              ->orWhere($qb->expr()->like('u.roles', '?2'))
                        ->setParameters(array('%ROLE_STAFF%','%ROLE_ADMIN%','%ROLE_SUPER_ADMIN%'));
                }
            ));
        }
        $builder->add('start', 'date', array(
                    'label' => 'orders.start',
                    'widget' => 'single_text',
                    'required' => false,
                ))
                ->add('end', 'date', array(
                    'label' => 'orders.end',
                    'widget' => 'single_text',
                    'required' => false,
                ))
                ->add('min', null, array(
                    'label' => 'orders.min',
                    'required' => false,
                )) 
                ->add('max', null, array(
                    'label' => 'orders.max',
                    'required' => false,
                ));
    }


    public function getDefaultOptions(array $options)
    {
        $options = parent::getDefaultOptions($options);
        $options['csrf_protection'] = false;

        return $options;
    }

    public function getName()
    {
        return 'psw_adminbundle_ordersfiltertype';
    }
}

0 ответов

Другие вопросы по тегам