почему параметр метода преобразования всегда равен нулю - PullRequest
0 голосов
/ 21 мая 2018

У меня есть задача показать пользователю дату окончания срока действия страницы.Для этого я создал тип формы, который содержит два поля, первое из которых позволяет выбирать между 1 неделей, 1 месяцем и 1 годом и пользовательским.если клиент выбирает пользовательский, отображается другое поле календаря.после того как я использовал преобразователь данных, потому что первое поле возвращает строку ('1week', '1year' ...), а второе поле будет нулевым или датой, проблема в том, что метод обратного преобразования работает отлично, но параметрметод преобразования является нулевым, т. е. когда пользователь хочет редактировать страницу, он не видит последние значения двух полей.

class ExpiryDateType extends AbstractType {

public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder, array $options) {
    $builder     ->add("chosen",  \Symfony\Component\Form\Extension\Core\Type\ChoiceType::class,array(
                'choices' => array(
                    '1 week' => '7',
                    '1 month' => '30',
                    "1 year"=>"365",
                    "custom"=>"custom"
                )))


            ->add('ExpiryDate', 'sonata_type_date_picker', array('format' => 'yyyy-MM-dd', 'label' => '', 'required' => false))

    ->addModelTransformer(new \ADS\CoreBundle\Form\DataTransformer\ExpiryDateTransformer());
}

public function configureOptions(\Symfony\Component\OptionsResolver\OptionsResolver $resolver) {}


public function buildView(\Symfony\Component\Form\FormView $view, \Symfony\Component\Form\FormInterface $form, array $options) {
    parent::buildView($view, $form, $options);  
}
 public function getBlockPrefix()
{
    return 'expirydate';
}

}

, и это преобразователь

class ExpiryDateTransformer implements DataTransformerInterface {

public function transform($date) {
    //date is null !!!!
}

public function reverseTransform($array) {

    if ($array["chosen"] == "7") {
        $date = new \DateTime("now");
        $date->modify("+1 week");
        $date->format('Y-m-d H:i:s');
        return($date);
    } else if ($array["chosen"] == "30") {
        $date = new \DateTime("now");
        $date->modify("+1 month");
        $date->format('Y-m-d H:i:s');
        return($date);
    } else if ($array["chosen"] == "365") {
        $date = new \DateTime("now");
        $date->modify("+1 year");
        $date->format('Y-m-d H:i:s');
        return($date);
    } else {
        return($array["ExpiryDate"]);
    }
}

}

...