3

小枝ビューでエンティティをフィルタリングするためにフォーム (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,
                    );
    }
4

2 に答える 2

2

私はそれを見つけた:

エコー「4.....」行のすぐ下

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

よろしく。

于 2011-08-27T16:22:57.500 に答える
2

データでは、プロパティpersonaFiltrarMailを適切な値に設定できます。

たとえば、コントローラーで:

$object = new Object();
$object->personaFiltrarMail = 'two@mail.com';
$form = $this->createFormBuilder($object);

次に、テンプレートをレンダリングします。

于 2011-08-16T14:57:41.010 に答える