1

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

/admin/homepage, /admin/news,admin/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 }
4

2 回答 2

0

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

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

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

于 2015-12-30T09:38:59.697 回答
0

Symfony 的好习惯是在你的控制器中设置路由,使用注解

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 注释

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

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;
}
于 2015-12-30T09:48:12.003 回答