【问题标题】:symfony2 routing issuesymfony2 路由问题
【发布时间】:2012-04-10 00:00:27
【问题描述】:

好的,所以我有一个正确创建 crud 的实体...它为我提供了实体的 .yml 路由文件...

在 yml 文件中我指定了一个路由,例如:

manager_agentview:
    pattern: /manager/{id}/view
    defaults: { _controller: "EcsCrmBundle:Management:agentview" }

这很好用……但是,这个页面的内容是一个列表……

我的功能,是这样的:

public function agentviewAction($id, $start = null, $end = null) {
        $em = $this->getDoctrine()->getEntityManager();
        $request = $this->getRequest();
            $today = time();
            echo $end;
            if ($end == null) {
                if (date('l') == "Saturday") { $end = date("Y-m-d 23:59:59"); } else { $end = date("Y-m-d 23:59:59", strtotime('next saturday', $today)); }
            }
            if ($start == null) {
                if (date('l') == "Sunday") { $start = date('Y-m-d 00:00:00'); } else { $start = date('Y-m-d 00:00:00', strtotime('last sunday', $today)); }
            }
            $entities = $em->getRepository('EcsCrmBundle:TimeClock');
            $query = $entities->createQueryBuilder('t');
            $query = $query->select('t')
                  ->where('t.daydate BETWEEN :start AND :end')
                  ->andwhere("t.noteBy = :id")
                  ->orderBy("t.id", 'ASC')
                  ->setParameter('start', $start)
                  ->setParameter('end', $end)
                  ->setParameter('id', $id)
                  ->getQuery();
            $entities = $query->getArrayResult();
            $dateRangeForm = $this->createForm(new DateRangeType());

            $query = $em->getRepository('EcsAgentManagerBundle:User')->find($id);

            //return new Response('yep', 200);
            return $this->render('EcsCrmBundle:TimeClock:view.html.twig', array('entity' =>$entities, 'user' => $query, 'start' => $start, 'end' => $end, 'form' => $dateRangeForm -> createView(),));  
    }

dateRangeForm,只是创建了 2 个 jquery datepicker 框..

但是,当我在我的路线中添加{start}/{end} 时,它不断告诉我它找不到正确的路线......因为我希望 URL 保持不变(最终 - 没有日期URL)——我必须弄清楚如何将数据发布到同一个函数,而不会破坏通过以下方式查看数据的能力:site.dev/manager/12/view

【问题讨论】:

    标签: symfony routes


    【解决方案1】:

    如果我正确理解您的问题,您希望能够拥有一个单独的控制器函数来处理

    /manager/1/view/start_date/end_date

    也处理

    /manager/1/view

    正确吗?

    对此有两种解决方案。第一个是创建一个可选的占位符,如下所述:http://symfony.com/doc/current/book/routing.html。基本上,您可以将路线更新为如下所示:

    manager_agentview:
    pattern: /manager/{id}/view/{start}/{end}
    defaults: { _controller: "EcsCrmBundle:Management:agentview", start: null, end: null}
    

    然后路由仍将匹配 /manager/1/view 并将 start 和 end 设置为 NULL。

    第二种解决方案是创建多条路由,它们都指向同一个控制器,一个版本带有开始和结束日期,一个版本没有它们。我能想到你可能想要这样做的唯一原因是,如果你不希望你的路由匹配一个包含开始但没有结束的 URL,因为在这种情况下上述解决方案仍然匹配。

    【讨论】:

      猜你喜欢
      • 2016-03-10
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 2012-07-29
      • 2016-04-19
      • 1970-01-01
      相关资源
      最近更新 更多