Symfony2: поле объекта (html SELECT) устанавливает ВЫБРАННЫЙ элемент

Я использую форму (filterForm) для фильтрации объектов в виде ветки.

'filterForm' имеет только поле типа 'entity'. В представлении он показывает тег HTML-SELECT-OPTIONs.

Когда пользователь изменяет выбор, вызывается тот же контроллер, который выполняет необходимые действия для фильтрации списка сущностей.

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

Немного кода поля из index.html.twig:

  {{ form_widget(personalFilterForm.personaFiltrarMail,
                         { 'empty_value': 'Todos',
                           'attr': {'selected': personaFiltrarMail,
                                    'onChange': 'javascript:document.filtrado.submit()' }
                         }
                )
  }}

Этот код генерирует этот HTML-код:

    <select name="test_onebundle_type[personaFiltrarMail]" id="test_onebundle_type_personaFiltrarMail" 
onchange="javascript:document.filtrado.submit()" 
required="required" selected="[email protected]">
      <option value="">Todos</option>
      <option [email protected]">Name One</option>
      <option [email protected]">Name Two</option>
      <option [email protected]">Name three</option>

Настоящая проблема здесь (я думаю) заключается в том, чтобы узнать, как я могу получить доступ к подэлементу OPTIONS, чтобы установить атрибут SELECTED для конкретного элемента OPTION.

Спасибо.

=== Контроллер ===

Вот "Контроллер"...

Все четыре пронумерованных «эха» дают мне почту: «[email protected]». Но тег SELECT html всегда находится в первом теге OPTION.

class HorasController extends Controller
{
    /**
     * Lists all Horas entities.
     *
     * @Route("/", name="horas")
     * @Template()
     */
    public function indexAction()
    {
        $em = $this->getDoctrine()->getEntityManager();

        $personas = $em->getRepository('PtGhorgaBundle:Personal')->findAll();
        $personalFilterForm = $this->createForm(new PersonalFilterType(), $personas);

        $request = $this->getRequest();
        $formVars = $request->request->get('pt_ghorgabundle_type');
        $personaFiltrarMail = $formVars['personaFiltrarMail'];
        //echo "1.- [".$personaFiltrarMail."]<br />";

        if (!isset($personaFiltrarMail) || $personaFiltrarMail=="") {
            $entities = $em->getRepository('PtGhorgaBundle:Horas')->findAll();            
        } else {
            $criterio = array('persona' => $personaFiltrarMail,);            
            $entities = $em->getRepository('PtGhorgaBundle:Horas')->findBy($criterio);
            $criterio = array('mail' => $personaFiltrarMail,);            
            $personaFiltrarMail = $em->getRepository('PtGhorgaBundle:Personal')->find($criterio)->getMail();
            echo "2.- [".$personaFiltrarMail."]<br />";
            $personalFilterForm->personaFiltrarMail = $personaFiltrarMail;   
            echo "3.- [".$personaFiltrarMail."]<br />";
            echo "4.- [".$personalFilterForm->personaFiltrarMail."]<br />";
        }

        return array('entities' => $entities, 
                     'personas' => $personas,
                     'personalFilterForm' => $personalFilterForm->createView(),
                     'personaFiltrarMail' => $personaFiltrarMail,
                    );
    }

person ferpega    schedule 13.08.2011    source источник


Ответы (2)


В ваших данных вы можете установить свойство personaFiltrarMail в соответствующее значение.

Например, в вашем контроллере:

$object = new Object();
$object->personaFiltrarMail = '[email protected]';
$form = $this->createFormBuilder($object);

Затем визуализируйте свой шаблон.

person julesbou    schedule 16.08.2011
comment
Привет @Jules, спасибо за ваш ответ, но с этим не повезло. Я добавил в вопрос контроллер/indexAction. - person ferpega; 17.08.2011

Я нашел это:

чуть ниже эхо "4 ..." строки

    $data = array('personaFiltrarMail'=> $personaFiltrarMail);
    $personalFilterForm->setData($data);  

С уважением.

person ferpega    schedule 27.08.2011