single_textウィジェットを使用して日付フィールド付きのフォームを作成しました。Bootstrap datepickerを使用しているので、これを選択します。
私が抱えている問題は、フィールドが空ではなく常に現在の日付で入力されていることです。
これによると、 requiredをfalseに設定すると機能するはずですが、idは機能しません。データに対して同じ空の文字列にempty_valueを設定しようとしましたが、最初のケースでは、おそらくこのオプションが選択フィールド用であるため、何も起こりませんでした。2番目のケースでは、「タイプ「\ DateTime」の期待される引数、「文字列」が指定された」という例外が発生します。
DataTransformerを使用してみましたが、違いはありませんでした。データフィールドの場合、値は常にDateTimeToLocalizedStringTransformerを通過し、正しく理解していれば、空の値の場合は空の文字列を返すため、データトランスフォーマーの後で問題が発生することがわかりました。
私が試したもう1つのことは、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';
}
}