小枝ビューでエンティティをフィルタリングするためにフォーム (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>
ここでの本当の問題 (私が思うに) は、具体的な OPTION アイテムに SELECTED 属性を設定するために OPTIONS サブ要素にアクセスする方法を知ることです。
ありがとう。
===コントローラー===
ここで「コントローラー」...
4 つの 'echoes' のすべての番号から、'two@mail.com' というメールが返されます。ただし、SELECT html TAG は常に最初の 1 つの 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,
);
}