2016-11-01 1 views
0

У меня очень небольшая проблема с symfony, но я просто не сейчас, как начать. Теперь я продолжаю меняться, когда кодирую, никогда не заканчивая реальную вещь.Symfony sonata make make formmapper item редактируемый с логическим состоянием

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

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

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

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

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

Спасибо!

ответ

0

я, наконец, решил ее

То, что я также попытался было получало значение чего-то вы добавили к 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 я нашел переменную предмет, в этой теме всю информацию вы можете добавить к 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')); 
Смежные вопросы