Я использую 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 из моей базы данных), но когда я создаю новый объект, он выдает ошибку, так как нет данных для получения.
Так есть ли способ отключить отображение при создании новой формы и активировать ее только при редактировании формы?
ошибка: «Примечание: неопределенный индекс: исключения»