2014-02-21 2 views
0

Я хочу получить значение по умолчанию из формы. Например, я вынес избранную форму окна, используя следующий код:Symfony2: Как получить значение по умолчанию из формы в контроллере?

$form = $this->createFormBuilder() 
      ->add('patient', 'choice', array(
       'choices' => $patientArray, 
       'required' => true, 
       'label' => false 
      )) 
      ->getForm(); 

The patientArray значений состоят из patient_id и patient_name:

array(
    '2' => 'John' 
    '3' => 'Jane' 
); 

Итак, я хотел бы получить значение по умолчанию, которое это 2 => John без отправки и без выбора формы. Каков правильный способ достижения этого в контроллере?

+0

Не уверен, что это сработает, но вы можете использовать '' data '=> current (array_keys ($ patientArray)) 'для установки пустых данных, а затем использовать' $ form-> get ('patient') -> getEmptyData() 'или возможно' $ form-> get ('patient') -> getData() '. Опять же, не уверен, действительно ли это работает. – qooplmao

+0

@Qoop Спасибо за ваш ответ. Это неплохая идея! Я все еще удивляюсь, как я могу получить объект формы в другом методе действий, 'indexAction'? – lvarayut

+1

Вы можете создать свою форму как услугу, а затем просто вызвать ее, как любую другую услугу, с помощью '$ this-> createForm ('my.form')'. - См. Http://symfony.com/doc/current/book/forms.html#defining-your-forms-as-services – qooplmao

ответ

0

Вам необходимо установить значение по умолчанию в entity. Вы можете использовать метод __construct().

// create a task and give it some dummy data for this example 
    $task = new Task(); 
    $task->setTask('Write a blog post'); 
    $task->setDueDate(new \DateTime('tomorrow')); 

    $form = $this->createFormBuilder($task) 
     ->add('task', 'text') 
     ->add('dueDate', 'date') 
     ->add('save', 'submit') 
     ->getForm(); 

    return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
     'form' => $form->createView(), 
    )); 

В этом поле Пример task имеет Write a blog post значение по умолчанию. Вы также можете сделать это в __construct(), и вам не нужно использовать setter, но это не обязательно.

Но лучше использовать __construct вместо setter как:

// src/Acme/TaskBundle/Entity/Task.php 
namespace Acme\TaskBundle\Entity; 

class Task 
{ 
    protected $task; 

    protected $dueDate; 

    public function __construct() { 
     $this->task = 'Write a blog post'; 
    } 

и у вас всегда есть значение по умолчанию при создании объекта Task

P.S. Вы можете найти больше примеров в документации forms

+0

Не могли бы вы привести несколько примеров? – lvarayut

+0

Я обновил ответ, проверьте пожалуйста –

+0

Спасибо за ваш ответ. Вопрос в том, как я могу получить значение по умолчанию из 'Select box', например, у меня есть' patientFormAction', используемый для отображения формы. Затем, когда я открываю первую страницу своего приложения, будет выполняться 'indexAction', поэтому я хочу получить первое значение формы' select box', '2 => John', чтобы использовать его в мой 'indexAction'. – lvarayut

Смежные вопросы