2013-09-26 40 views
0

我在Symfony2中構建了一個頁面,該頁面允許我在數據庫中搜索術語(例如,某人的姓名)並顯示在同一頁面中(即使在頁面重新加載後)所有匹配記錄(例如所有具有此名稱的人)。在Symfony2中搜索DB上的記錄

這是我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中定義的表單中的條目。 無論如何,我不知道如何做到這一點,快速搜索谷歌和論壇不幫助我。

有什麼建議嗎?

回答

2

您通過

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

獲取Get-參數,但這個你仍然需要$request變量。你可以使用它作爲參數,改變你的方法簽名是:

public function anagraficaAction(Request $request) 

這樣,您就可以撥打$request參數的方法。

另一種方法是獲取當前控制器在您的方法中的請求。

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

使用這個你可以改變你setParameter此:

setParameter('nome', $searchName) 
0

將此setParameter('nome', 'Alex')更改爲setParameter('nome', $_GET['search_name'])之類的內容,因爲此表單使用get方法傳遞數據。

+0

正確的,除了在Symfony2的首選方法是:'$請求 - >查詢 - >獲取( '名')';請求對象可以使用'$ request = $ this-> getRequest();'獲取 – Shaheer

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

}