是否可以仅使用参数构建Symfony路径?

时间:2016-11-23 17:31:09

标签: php symfony drupal-8

我想减少重复代码的数量,并在Drupal 8应用程序中提供规范的URL。由于路由系统是在Symfony上构建的,因此我将其包含在标题中。

我在mymodule.routing.yml文件中的路径下构建路径。我想匹配第一个参数中指定数量的不同字符串,以及一个slug,它可以是第二个参数中的任何字符串。它看起来像这样:

entity.my_entity.canonical:
  path: '/{type}/{slug}'
  defaults:
    _controller: '\namespace\PostController::show'
  requirements:
    _permission: 'perm'
    type: different|strings|that|can|match|

现在,当我尝试使用例如/match/some-slug进行访问时,它只是说“找不到页面”。 如果我在路径中存在静态内容,例如path: '/j/{type}/{slug}',那么当我在浏览器中打开/j/match/some-slug时,它会按预期工作。

我的老板不喜欢URL中的任何不必要的字符,所以我想通过使用两个参数来实现这一点,如第一个例子中所示。

2 个答案:

答案 0 :(得分:1)

正如Yonel在评论中提到的,您可以使用debug:router来检查所有路由。我没看到你的代码有什么问题。

尝试运行bin/console router:match "/match/blaaa",如果您看到某个控制器不是您想要的那个,那么您需要更改路线。但情况应该不是这样,因为你得到的是404.

这是我的确切设置

的routing.yml:

entity.my_entity.canonical:
  path: '/{type}/{slug}'
  defaults:
    _controller: 'MyBundle:Something:foo'
  requirements:
    type: different|strings|that|can|match|

MyBundle \ SomethingController内部:

public function fooAction($id)
{
  return new Response("bar");
}

然后转到http://localhost/match/fom会显示“条形码”响应。

答案 1 :(得分:0)

我再次阅读了文档(RTM),发现它在Drupal 8中是不可能的,虽然它可以在Symfony中使用。

  

请注意,路径的第一项不能是动态的。

来源:Structure of routes in Drupal 8