0

データベースで用語 (人の名前など) を検索し、同じページに (ページのリロード後でも) 一致するすべてのレコード (たとえば、この名前を持つすべての人) を表示できるようにするページを Symfony2 で作成しています。 )。

これは私の anagrafica.html.twig です

{# src/Acme/MyBundle/Resources/views/Page/anagrafica.html.twig #}
{% extends 'AcmeMyBundle::layout.html.twig' %}

{% block body %}

    <form id="formsearch" name="p" method="get" action="anagrafica">
        <span>
            <input type="text" name="search_name"  id="search_name" />
        </span>
        <input type="image" name="button_search" />
    </form>

    {% for anagrafica in anagrafiche %}
        <article class="blog">
            <div class="date">{{ anagrafica.DataNascita|date('c') }}</div>
            <header>
                <h2><a href="{{ path('AcmeMyBundle_showAnag', { 'id': anagrafica.id }) }}">{{ anagrafica.nome }}</a></h2>
            </header>
            <div class="snippet">
                <p>{{ anagrafica.cognome }}</p>
                <p class="show_complete"><a href="{{ path('AcmeMyBundle_showAnag', { 'id': anagrafica.id }) }}">Show all data</a></p>
            </div>
        </article>
    {% else %}
        <p>There are no entries</p>
    {% endfor %}
{% endblock %}

これは私のPageController.phpです

<?php // src/Acme/MyBundle/Controller/PageController.php

namespace Acme\MyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class PageController extends Controller {
    //...
    public function anagraficaAction() {    
        $em = $this->getDoctrine()
            ->getEntityManager();

        $anagrafiche = $em->createQueryBuilder()
            ->select('b')
            ->from('AcmeMyBundle:Anagrafiche',  'b')
            ->where("b.nome = :nome")
            ->setParameter('nome', 'Alex' )
            ->addOrderBy('b.id', 'DESC')
            ->getQuery()
            ->getResult();

        return $this->render('AcmeMyBundle:Page:anagrafica.html.twig', array('anagrafiche' => $anagrafiche));
    }
}

'Alex' in : ->setParameter('nome', 'Alex' ) PageController.php を更新し、その名前を anagrafica.html.twig で定義されたフォームのエントリを参照する変数に置き換えるだけでよいと思います。とにかく、これを行う方法がわかりません.Googleやフォーラムで簡単に検索しても役に立ちませんでした.

なにか提案を?

4

3 に答える 3

2

経由でGETパラメータを取得します

$searchName = $request->query->get('search_name');

$requestしかし、これにはまだ変数が必要です。これをパラメータとして使用し、メソッド シグネチャを次のように変更できます。

public function anagraficaAction(Request $request)

このように$requestして、メソッドでパラメーターを呼び出すことができます。

もう 1 つの方法は、メソッド内で現在のコントローラーの要求を取得することです。

$request = $this->get('request');

これを使用すると、次のように変更できますsetParameter

setParameter('nome', $searchName)
于 2013-09-26T10:36:55.153 に答える
0

I found the solution. I edited my PageController.php such this:

<?php
// src/Acme/MyBundle/Controller/PageController.php

namespace Acme\MyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class PageController extends Controller
{
    public function indexAction()
    {
        return $this->render('AcmeMyBundle:Page:index.html.twig');
    }

    public function infoAction()
    {
       return $this->render('AcmeMyBundle:Page:info.html.twig');
    }

    public function anagraficaAction(Request $request)
    {


       $em = $this->getDoctrine()
       ->getEntityManager();

$title = $request->get('search_name');


       $anagrafiche = $em->createQueryBuilder()
       ->select('b')
       ->from('AcmeMyBundle:Anagrafiche',  'b')
       ->where("b.nome = :nome")
       ->setParameter('nome', $title )
       ->addOrderBy('b.id', 'DESC')
       ->getQuery()
       ->getResult();

       return $this->render('AcmeMyBundle:Page:anagrafica.html.twig', array('anagrafiche' => $anagrafiche));
    }

}
于 2013-09-30T06:11:26.637 に答える