【问题标题】:Symfony2 Routing: How to set a default valueSymfony2 路由:如何设置默认值
【发布时间】:2014-08-21 18:08:39
【问题描述】:

在我的控制器中,我有 2 个带有注释的操作:

/**
     * Lists all Mains entities.
     *
     * @Route("/{lang}/{main_name}", defaults={"lang" = "de"})
     * @Method("GET")
     * @Template()
     */
    public function mainAction($lang,$main_name)
    {
        $em = $this->getDoctrine()->getManager();
        $entity = $em->getRepository('MyWebsiteBundle:Main')->findOneBy(array('name'=>$main_name));
        echo $entity->getContent();

        die;

    }

    /**
     * Lists all Branches.
     *
     * @Route("/{lang}/{branch}/b{id}", defaults={"lang" = "de"})
     * @Method("GET")
     * @Template()
     */
    public function branchAction($lang,$id)
    {
        $em = $this->getDoctrine()->getManager();
        $entity = $em->getRepository('MyWebsiteBundle:Branch')->find($id);
        echo $entity->getMain()." > ".$entity->getName()."<br><br>";
        echo $entity->getContent();

        die;

    }

当我在没有“lang”的情况下调用 mainAction 链接时,例如:“localhost/contact”而不是“localhost/en/contact” 它有效,调用了站点“contact”。

但是当我将 branchAction 称为“localhost/products/b2”而不是“localhost/en/products/b2”时,我收到错误,因为我认为它被称为 mainAction。

我想做的事有可能吗?感谢您的支持!!

【问题讨论】:

    标签: php symfony routing annotations


    【解决方案1】:

    听起来您的要求的简化版本是:

    • 如果 URL 不以 /[a-z]{2}/ 开头,则重写 URL,将 /de/ 添加到原始路径。
    • 如果网址以/[a-z]{2}/开头,则正常处理。

    如果是这种情况,那么将其设为您的 first 控制器操作可能会起作用:

    /**
     * @Route("/{path}", name = "rewrite", requirements = { "path" = "[a-zA-Z]{3,}" })
     */
    public function rewriteAction($path) {
    
        $defaultLanguage = "de";
    
        return $this->redirect("$defaultLanguage/$path");
    
    }
    

    这使用 requirements 字段来指示 Symfony 仅在路径以 3 个字母开头(即超过 2 个字母)时使用此路由。

    您需要处理一些细微差别(删除多余的斜杠、处理像 /a/ 这样的单字符路径、处理像 /t5 这样的数字路径等),但我认为这可能是一个好的开始.

    您也可以在服务器级别处理此问题,例如使用 Apache URL 重定向。

    最后,请不要在您的控制器方法中使用echo $content;die;。这违背了拥有 MVC 框架的目的。相反,您应该使用return new Response($content);。这样,如果 Symfony 在调用控制器方法后有任何后处理要做,它就可以做到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 2018-01-14
      • 2017-01-06
      • 2021-11-21
      • 2021-01-19
      相关资源
      最近更新 更多