Соната Symfony делает редактируемый элемент formmapper с логическим условием

У меня очень небольшая проблема с Symfony, но я просто не знаю, с чего начать. Теперь я продолжаю меняться, когда кодирую, никогда не заканчивая ничего.

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('id')
        ->add('schedule');
}

Теперь расписание имеет тип datetime. Задача cron, чтобы код выполнялся, когда расписание совпадает с текущим днем.

Администратор должен иметь возможность изменять дату и время расписания только тогда, когда оно находится в будущем, поэтому read_only должно иметь значение true, если это произошло в прошлом.

Небольшая проблема, но я не знаю, как лучше всего это сделать? Я могу придумать несколько решений:

  1. Должен ли я создать собственный шаблон, чтобы переопределить логику редактирования и сборки по умолчанию с помощью twig?
  2. Следует ли внутри configureListField создать настраиваемое действие, которое ссылается на настраиваемый шаблон?
  3. Должен ли я создать настраиваемый контроллер, чтобы позволить контроллеру решать, и если да, могу ли я сохранить свои configureListField и configureShowField в админке нетронутыми, или их список и создание также должны выполняться через этот контроллер?

Спасибо!


person SilentLucidity    schedule 01.11.2016    source источник


Ответы (1)


Я наконец решил это

Я также пытался получить ценность того, что вы добавили в formmapper.

//todo get value
$formMapper
  ->add('date')

Поэтому я решил сделать var_dump внутри функции configureFormField.

protected function configureFormFields(FormMapper $formMapper)
{
   die("DIED ".var_dump($this)." DIED @".__FILE__." line ".__LINE__);
}

В var_dump я обнаружил переменную с именем subject, в которой хранится вся информация, которую вы можете добавить в formmapper.

Вы можете получить тему, используя:

$this->getSubject()

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

if ($this->getSubject->getSchedule > new \Datetime('now')
{
  $formMapper
     ->add('channel', null, array('label' => 'Choose a channel'));
else
{
  $formMapper
     ->add('channel', null, array('label' => 'Channel', 'read_only' => 'true'));
person SilentLucidity    schedule 03.11.2016