我想减少重复代码的数量,并在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中的任何不必要的字符,所以我想通过使用两个参数来实现这一点,如第一个例子中所示。
答案 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中使用。
请注意,路径的第一项不能是动态的。