【问题标题】:Check routing in symfony2在 symfony2 中检查路由
【发布时间】:2016-04-04 03:48:34
【问题描述】:

我想学习 symfony,我开始创建一个小应用程序。我有一个与路线有关的问题。所以,我的项目中有路线:

/admin/homepage/admin/newsadmin/galery

不,如果我写在 url /admin,这条路线不存在,我得到错误 No route found for "GET /admin/"。是否存在检查路由是否不存在并重定向到另一条路由的方法?提前谢谢,对不起我的英语 我的路线:

news_all:
path: /news/all/{page}
defaults: { _controller: AppAdminBundle:News:all, page: 1 }
requirements:
    page: \d+
    _method:  GET|POST
news_add:
path: /news/add
defaults: { _controller: AppAdminBundle:News:add }

【问题讨论】:

  • 您可以添加indexAction并在其中添加重定向到所需的功能。
  • 你是如何在控制器中定义路由的?
  • 我编辑了问题

标签: php symfony symfony-routing


【解决方案1】:

在您的情况下,最好的解决方案是覆盖默认 ExceptionController 并在那里添加自定义逻辑,例如重定向到其他页面 - 根据文档:http://symfony.com/doc/current/cookbook/controller/error_pages.html#overriding-the-default-exceptioncontroller

# app/config/config.yml
twig:
    exception_controller:  AppBundle:Exception:showException

注意: 当然,您也可以扩展默认的ExceptionController,而不是从头开始创建新的异常控制器。在这种情况下,您可能希望覆盖 showAction()findTemplate() 方法之一或两者。后者定位要使用的模板。

【讨论】:

  • 抱歉,如果我要访问不存在的路线,我不明白如何进行重定向
  • 当您访问不存在的路由时,HttpNotFoundException 会被触发,然后Symfony2 异常侦听器会捕获该异常并调用ExceptionConttroller。您所要做的就是实现您的自定义ExceptionController 并使用简单的$this->redirectToToute('your_route') 将用户重定向到正确的路线。
【解决方案2】:

Symfony 的良好做法是在控制器中设置 rout,使用注解

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

/**
* @Route("/news/add", name="news_add")
*/
public function addAction()
{
    // ...
}

另外,通过注解,您可以为整个控制器设置路由。 就您而言,这就是您要寻找的东西。

/**
* @Route("/admin")
*/
class NewsController extends Controller
{
    /**
     * @Route("/news/add", name="news_add")
     */
    public function addAction()
    {
        // ...
    }
}

另外,我建议你看看@Template annotation

否则,要回答您的问题,我认为您可以制作自定义树枝功能(查看this link 了解更多信息)。检查给定名称的函数是否为有效路由:

function routeExists($name)
{
    // I assume that you have a link to the container in your twig extension class
    $router = $this->container->get('router');
    return (null === $router->getRouteCollection()->get($name)) ? false : true;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
相关资源
最近更新 更多