Php 单符号布线中的多模式

Php 单符号布线中的多模式,php,symfony,routing,Php,Symfony,Routing,如何在单个Symfony布线中制作多个图案 通常我们有一个路由 blog: pattern: / defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 有可能有两种路由模式吗 差不多 blog: #Below pattern to match with '/' or '/index' pattern: {/ , /index} defaults: { _cont

如何在单个Symfony布线中制作多个图案

通常我们有一个路由

blog:
    pattern:   /
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }
有可能有两种路由模式吗

差不多

blog:
    #Below pattern to match with '/' or '/index'    
    pattern:   {/ , /index}  
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }

最简单的方法是复制块并创建两条路线

blog:
    pattern:   /
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }

blog_index:
    pattern:   /index
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }
因此,如果需要,您可以在路径中同时使用这两种方法

您可以看到另一篇关于如何在路由中使用正则表达式的文章。也许您可以编写一个简单的正则表达式,检查是否设置了索引

编辑:

如果您使用注释(我更喜欢),那么您可以在控制器的操作方法上编写多个路由。大概是这样的:

/**
* @Route("/");
* @Route("/home");
*/

你在用Symfony2吗?如果您正在并且可以使用注释代替yml或xml进行路由,则可以按照以下方式定义多条路由:

/**
* @Route("/");
* @Route("/home");
*/

那么你就不需要重复动作方法了。

只需补充一下john的答案:

我经常在FOSJsRoutingBundle中使用它:

/**
 * @Route("/", name="route_name_1", options={"expose"=true})
 * @Route("/{id}", name="route_name_2", options={"expose"=true})
 * @Method("GET")
 * @Template()
 */
这样我有一种方法和两条路线

只需记住设置默认$id值:

public function indexAction($id = null)
{
   ...
}

使用YAML管线时,还可以使用表达式语法引用现有管线定义


&
指定锚点的第一次出现,
*
指定要引用的锚点,
是否使用不同的参数?如果是,怎么做?现在是2017年:有没有一个Symfony3的方法来处理路由。yaml?很好…在这篇文章之前不知道锚。@LeeviGraham把我也算进去:D
blog: &blog
  path: /
  defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }

blog_index:
  <<: *blog
  path: /index

blog_page:
  <<: *blog
  path: /blog
blog:
  path: /
  defaults: &blog_defaults
    _controller: AcmeBlogBundle:Blog:index
    page: 1

blog_index:
  path: /index
  defaults: *blog_defaults

blog_page:
  path: /blog
  defaults: *blog_defaults
blog:
  path: /
  defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 }

blog_index:
  path: /index
  defaults: &blog_redirect
    _controller: FrameworkBundle:Redirect:redirect
    route: blog
    permanent: true

blog_page:
  path: /blog
  defaults: *blog_redirect