【问题标题】:Search function using twig in symfony在 symfony 中使用 twig 的搜索功能
【发布时间】:2014-07-07 08:59:28
【问题描述】:

我想创建一个简单的搜索功能。

搜索表单

<form class="pull-right hidden" role="search" id="nav-search-form" method="post" action="{{ path('_search') }}">
        <div class="input-group">
          <input type="text" class="form-control" placeholder="Search" name ="search">
          <span class="input-group-btn">
            <button type="submit" class="btn btn-default"></button>
          </span>
        </div>
      </form>

在我的默认控制器中。我有搜索功能

public function searchAction(){
       $request = $this->getRequest();
       $data =$request->request->all();


       $em = $this->getDoctrine()->getManager();
       $query = $em->createQuery(
        'SELECT p.type, p.id
        FROM FooTransBundle:Trans p
        WHERE p.type LIKE :data')
       ->setParameter('data',$data['search']);


    $res = $query->getResult();

    return $this->render('FooTransBundle:Default:search.html.twig', array(
        'res' => $res));

}

在我运行之后我得到了一个错误

注意:未定义索引:在 C:\xampp\htdocs\Sample\src\Foo\TransBundle\Controller\DefaultController.php 第 96 行搜索

在这一行 ->setParameter('data',$data['search']);我的控制器

谁能帮帮我。我对 symfony 很陌生。 感谢您的帮助。

【问题讨论】:

  • 错误表示 php 无法访问 $data['search'] 因为它未定义。尝试在查询之前 var_dump $data 的内容,这可能有助于确定其类型并了解如何访问它的内容。
  • 感谢您的帮助:)

标签: php symfony


【解决方案1】:

试试这个:

public function searchAction(){
   $request = $this->getRequest();
   $data = $request->request->get('search');


   $em = $this->getDoctrine()->getManager();
   $query = $em->createQuery(
    'SELECT p FROM FooTransBundle:Suplier p
    WHERE p.name LIKE :data')
   ->setParameter('data',$data);


$res = $query->getResult();

return $this->render('FooTransBundle:Default:search.html.twig', array(
    'res' => $res));

【讨论】:

  • 谢谢它现在正在运行 :) 但是你能帮我看看如何查看输出吗?真的很感激。
  • 在您的 twig 文件中,只需键入 ..{% for r in res %}{{ r.entityAttribute }} .. 即 {{ r.id }}, {{ r.type } }{% endfor %} 等,另请参阅我的更新答案..
  • 我有最后一个问题,我是否可以根据数据库中存在的所有数据进行搜索,而不仅仅是根据 WHERE p.type LIKE :data') 这部分中看到的类型代码?
  • 是的,你可以这样做,就像 "WHERE p.anotherEntityFieldName LIKE :data" .. 其中 anotherEntityFieldName 是您的实体类的任何字段名称,如类型、名称等 ..
  • 您能提供一个示例声明吗?我有一个以 id 和 name 作为属性的供应商表。我应该这样写-> WHERE p.name LIKE :data 直接吗?其中 name 是 Supplier 表的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 2021-07-05
相关资源
最近更新 更多