Я использую форму (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="two@mail.com">
<option value="">Todos</option>
<option value=one@mail.com">Name One</option>
<option value=two@mail.com">Name Two</option>
<option value=three@mail.com">Name three</option>
Реальная проблема здесь (я думаю) состоит в том, чтобы знать, как я могу получить доступ к подэлементу OPTIONS, чтобы установить атрибут de SELECTED для конкретного элемента OPTION.
Спасибо.
=== Контроллер ===
Здесь «Контроллер» ...
Все четыре пронумерованных «эха» дают мне письмо: «two@mail.com», но метка 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,
);
}