Я использую форму (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,
);
}