【问题标题】:Query database with user's input symfony2 framework使用用户输入的 symfony2 框架查询数据库
【发布时间】:2015-09-25 01:19:22
【问题描述】:

我目前正在使用 Symfony2 MVC 框架上的表单。我有一个在 HTML 页面中呈现表单的控制器。该表格允许用户向数据库提交有关他们选择的电影的信息。

 /**
     * @Route("/practise", name="practise")
     * @Template()
     */
    public function practiseAction(Request $request)
    {
            $movie = new movie();
            $form = $this->createForm(new MovieType(),$movie);

            $form->handleRequest($request);

            if($form->isValid())
            {
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($movie);
                $em->flush();

                return $this->redirectToRoute("success");

            }else{

                return $this->render('default/practise.html.twig', array(
                    'form' => $form->createView(),
                ));
            }
    }

我现在要做的是建立一个搜索字段,使用户能够在我的网站上搜索电影。如何获取用户在搜索字段中输入的内容并查询数据库以查看该电影是否在数据库中。让另一个控制器单独处理这个动作会更好吗?

如果之前有人这样做过,那么我将非常感谢任何提示。谢谢。

【问题讨论】:

标签: php forms symfony


【解决方案1】:

您可以很好地在当前控制器中实现搜索功能。

快速浏览一下the docs 会让您走上正轨。

基本上,您将用户输入作为参数传递,如下所示:

public function searchAction($userInput){
    //Your logic here
}

然后,正如文档中所示,您制定查询:

public function searchAction($userInput){
    $em = $this->getDoctrine()->getManager();
    $query = $em->createQuery(
        'SELECT m
         FROM AppBundle:Movie m
         WHERE m.title > :title'
    )->setParameter('title', $userInput);

    $movie = $query->getResult();

    //You render your view
}

虽然有许多更优化的方法可以达到相同的结果,所以我建议通读文档。

【讨论】:

  • 感谢您的回答。当你在上面创建了 searchAction 时,如何将 $userInput 参数传递给 action。那段代码是从哪里传递过来的?
  • 通过表单提交,因此通过路由:<form action="{{ path('route_you_defined_in_your_routing_file') }}">' 并在 searchAction 函数内部:public function searchAction(Request $request){ //Typical form view setting $userInput = $form->getData(); } 阅读有关表单的文档,解释得很好。
猜你喜欢
  • 2022-01-16
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2019-01-01
  • 2016-01-08
  • 1970-01-01
相关资源
最近更新 更多