我正在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));
}
}
我想我只需要更新我的PageController.php并替换名称'Alex' in :
->setParameter('nome', 'Alex' )
使用一个变量来引用我在anagrafica.html.twig中定义的表单中的条目。
无论如何,我不知道如何做到这一点,谷歌和论坛上的快速搜索没有帮助我。
有什么建议吗?
答案 0 :(得分:2)
您可以通过
获得GET参数$searchName = $request->query->get('search_name');
但为此你还需要$request
变量。您可以将其用作参数并将方法签名更改为:
public function anagraficaAction(Request $request)
这样,您可以在方法中调用$request
参数。
另一种方法是在方法中获取当前控制器的请求。
$request = $this->get('request');
使用此功能,您可以将setParameter
更改为:
setParameter('nome', $searchName)
答案 1 :(得分:0)
将此setParameter('nome', 'Alex')
更改为setParameter('nome', $_GET['search_name'])
,因为此表单使用get方法传递数据。
答案 2 :(得分:0)
我找到了解决方案。我编辑了我的PageController.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));
}
}