управлять населением поля в форме редактирования - PullRequest
0 голосов
/ 07 апреля 2019

Я использую Symfony 4, и у меня есть эта форма:


<?php

namespace App\Form;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\TimeType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;

use App\Entity\TypeParking;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class TypeParkingType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('libelle')
            ->add('tempsmax')
            ->add('jourdebut')
            ->add('jourfin')


            ->add('Exception_Name', TextType::class, ['property_path' => 'exception[name]'])
            ->add('Starting_date', DateType::class, [
                'property_path' => 'exception[datedebut]',
            ])
            ->add('Ending_date', DateType::class, [
                'property_path' => 'exception[datefin]',
            ])
            ->add('Starting_time', TimeType::class, ['property_path' => 'exception[heuredebut]'])
            ->add('Ending_time', TimeType::class, ['property_path' => 'exception[heurefin]'])


        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => TypeParking::class,
        ]);
    }
}

Когда я создаю новую форму, я обычно беру значения Exception_Name, Starting_date, Ending_date, Starting_time и Ending_time вручную и помещаю их в один массив json в одном поле базы данных. Однако, когда я иду редактировать форму, данные внутри json не разделяются, чтобы заполнить каждое из полей.

допустим, у меня есть этот массив json: {"Exceptions": {"name": "6fdfs", "StartDate": "2015-03-03", "StartHour": "00:00:00", "EndingDate": "2015-03-03", "EndingHour": "00:00:00"}} Я собираюсь взять значение name и использовать его для заполнения поля Exception_Name и т. Д. *

TL; DR: как я могу контролировать, как я хочу предварительно заполнить каждое поле формы редактирования

Edit: это мой datamapper

<?php
// src/Form/DataMapper/ColorMapper.php
namespace App\Form\DataMapper;

use App\Painting\Color;
use Symfony\Component\Form\DataMapperInterface;
use Symfony\Component\Form\Exception\UnexpectedTypeException;
use Symfony\Component\Form\FormInterface;

final class TypeParkingMapper implements DataMapperInterface
{
    /**
     * @param TypeParking|null $data
     */
    public function mapDataToForms($data, $forms)
    {
        // there is no data yet, so nothing to prepopulate
        if (null === $data) {
            return;
        }

        /** @var FormInterface[] $forms */
        $forms = iterator_to_array($forms);
       // initialize form field values
       $Excep=$data->getException();
       $forms['Exception_Name']->setData($Excep['Exceptions']['name']);
       $forms['Starting_date']->setData($Excep['Exceptions']['StartDate']);
       $forms['Ending_date']->setData($Excep['Exceptions']['EndingDate']);
       $forms['Starting_time']->setData($Excep['Exceptions']['StartHour']);
       $forms['Ending_time']->setData($Excep['Exceptions']['EndingHoure']);



    }

    public function mapFormsToData($forms, &$data)
    {
        /** @var FormInterface[] $forms */
        $forms = iterator_to_array($forms);

        // as data is passed by reference, overriding it will change it in
        // the form object as well
        // beware of type inconsistency, see caution below
        $data = new TypeParking(
            $forms['Exception_Name']->getData()

        );
    }
}

Так что он отлично работает, когда я редактирую объект (поскольку getException () возвращает массив json из моей базы данных), но когда я создаю новый объект, он выдает ошибку, так как нет данных для получения. Так есть ли способ отключить отображение при создании новой формы и активировать ее только при редактировании формы?

ошибка: «Примечание: неопределенный индекс: исключения»

1 Ответ

1 голос
/ 07 апреля 2019

Вы можете написать DataMapper , чтобы полностью контролировать, как ваши данные отображаются в вашей форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...