如果我想让它使除了我在 /ExplicitControllerName/ExplicitActionToRun 上操作后定义的 url 之外的每个 url 调用......路由可能是什么样子的。
例如一些伪代码:
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/路由/使用参数作为控制器或操作名称
想象一下,我有 100 个页面,其中有很多子路由页面每次都执行几乎相同的路由。我想为所有这 100 个控制器执行 1 个路由。我们将如何做到这一点?
P.S我真的想要像 C#.NET MVC 4.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
实现。查看本机实现以了解从哪里开始。它将允许您定义回退。
可以通过SensioFrameworkExtraBundle在类和方法级别上过度的@Route注释来实现。
。或者使用带有隐式资源名称的 FOSRestBundle 自动路由生成功能,使用更少的注释更优雅。也许您需要使用 FOSRestBundle 的一些手动路由定义注释来更正一些生成的路由。
这两种方法最初仍然不需要将路由资源显式添加到您的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
您可以通过以下方式解决必须导入所有资源的问题:
- 引入自定义批注(类级别(
- 创建编译器传递或自定义路由加载程序,您可以在其中...
- 使用 Finder 查找带有该注释的所有捆绑包中的所有控制器类
- 最后将所有这些作为具有类型注释/REST的资源添加到那里的路由集合中
如果您不打算使用数百个控制器,并且在编译器传递、自定义注释方面没有太多经验......等等,只要在路由配置中注册资源,您肯定会更快。