在 Symfony2 中的数据库中搜索记录


Search records on DB in Symfony2

我正在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 %}

这是我的页面控制器.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));
    }
}

我想我只需要更新我的页面控制器.php并替换名称'Alex' in : ->setParameter('nome', 'Alex' )带有一个变量,该变量引用我的表单中在anagrafica.html.twig中定义的条目。无论如何,我不知道该怎么做,在谷歌和论坛上快速搜索对我没有帮助。

有什么建议吗?

你通过以下方式获得 GET 参数

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

但为此,您仍然需要 $request 变量。您可以将其用作参数并将方法签名更改为:

public function anagraficaAction(Request $request)

这样,就可以在方法中调用 $request 参数。

另一种方法是在方法中获取当前控制器的请求。

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

使用此功能,您可以将setParameter更改为:

setParameter('nome', $searchName)
将此

setParameter('nome', 'Alex')更改为类似 setParameter('nome', $_GET['search_name']) 的内容,因为此表单使用 get 方法传递数据。

我找到了解决方案。我编辑了我的页面控制器.php这样:

<?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));
    }
}