首页 文章

在symfony 2中定义控制器/操作的默认路由

提问于
浏览
4

如果我想这样做,那么每个url调用除了我在 /ExplicitControllerName/ExplicitActionToRun 之后定义的那些之后调用...路由看起来怎么样 .

例如一些伪代码:

default_pathing:
    pattern:  /{controller}/{action}
    defaults: { _controller: Bundle:Default:index }

所以,如果我去 www.example.com/Page/About

它会打电话给我的控制器

class Page extends Controller
{
    public AboutAction()
    {
        // Called by above URL
    }
}

这个问题没有回答:Symfony2 / routing / use parameters as Controller or Action name

想象一下,我有100个页面,每次都有很多子路由页面做了几乎相同的路由 . 我想为所有这100个控制器做1路由 . 我们怎么做?

P.S我真的想要像C#.NET MVC 4.0路由这样的东西,它允许你设置一个典型设置的路由,即使它至少用于开发

2 回答

  • 0

    你的问题并不完全清楚,但这里有一些提示 .

    我可以想象你想要解决的两个用例:

    1)你有很多种类的CMS页面,就像你的例子一样,这些页面没有太多的逻辑,只是呈现一些视图,在这种情况下,你会这样:

    class CMSPageController
    {
        public function renderPage($pageSlug)
        {
            $page = $this->cmsPageRepository->findBySlug($pageSlug);
    
            // your logic to render the view
        }
    }
    

    和相应的路由配置:

    <route id="cms_page_view" pattern="/cms/{pageSlug}">
      <default key="_controller">cms_page.controller.page:renderPage</default>
      <requirement key="_method">GET</requirement>
      <requirement key="slug">[0-9a-zA-Z\-\.\/]+</requirement>
    </route>
    

    2)您有更复杂的需求,和/或遵循特定模式来命名控制器/操作,因此您需要编写自定义UrlMatcherInterface实现 . 看看native implementation知道从哪里开始 . 它允许您定义回退 .

  • 2

    这可以使用SensioFrameworkExtraBundle的@Route注释在类和方法级别过度实现...

    ...使用带有隐式资源名称的FOSRestBundle的automatic route generation,使用更少的注释更优雅或更优雅 . 也许你'll need to correct some of the generated routes using some of FOSRestBundle' s manual route definition annotations .

    这两种方法最初仍然需要明确地将路由资源添加到 app/config/routing.yml .

    @Route的示例导入

    # import routes from a controller directory
    blog:
        resource: "@SensioBlogBundle/Controller"
        type:     annotation
    

    FOSRestBundle的示例导入

    users:
        type:     rest
        resource: Acme\HelloBundle\Controller\UsersController
    

    您可以通过以下方式导入所有资源:

    如果您不打算使用数百个控制器并且没有太多编译器传递,自定义注释等方面的经验,那么只需在路由配置中注册资源就可以更快 .

相关问题