mcg*_*goo 3 php model-view-controller routes symfony symfony-3.2
我正在使用 Symfony 3.2.9 创建一个应用程序,并且我想做一个管理面板来管理应用程序。应用程序的工作方式类似于 CMS,因此使用 URL 创建新页面,例如domain.com/pagename1 以及domain.com/pagename1/subpagelevel2 等。问题是当我想为管理面板创建 URL 时,URL 应该类似于:domain.com/admin,但管理面板还需要一些子页面,例如domain.com/admin/manage 或domain.com/admin/manage/编辑/1等。
我创建了 DefaultController ,其路由如下:
/**
* @Route("/", name="homepage")
*/
Run Code Online (Sandbox Code Playgroud)
和 AdminController 的路由如下:
/**
* @Route("/admin", name="admin")
*/
Run Code Online (Sandbox Code Playgroud)
问题是,当我想动态创建应用程序的新子页面时,我需要创建路由,例如:
/**
* @Route("/{page}")
*/
Run Code Online (Sandbox Code Playgroud)
但这会覆盖我的管理面板子页面(例如domain.com/admin/manage)。
是否可以通过 AdminController 从默认 DefaultController 中排除或覆盖路径?我希望能够从 DefaultController 创建所有 URL,除了像 domain.com/admin ... 等开头的路径。
从https://symfony.com/doc/current/routing.html中的文档中,您可以使用该requirements参数来指定更严格的匹配
我想这样的事情会起作用:
默认控制器:
/**
* @Route("/", name="homepage")
*/
Run Code Online (Sandbox Code Playgroud)
管理员控制器:
/**
* @Route("/admin", name="admin")
*/
Run Code Online (Sandbox Code Playgroud)
其他控制器:
/**
* we exclude page=admin from this controller
* @Route("/{page}", requirements={"page": "^(?!admin).+"}))
*/
Run Code Online (Sandbox Code Playgroud)