【问题标题】:Creating routes in a DRY way in Symfony2在 Symfony2 中以 DRY 方式创建路由
【发布时间】:2012-04-10 11:00:21
【问题描述】:

我已经使用 Symfony 很长时间了,但我是 Symfony2 的新手。在使用 CRUD 生成器为名为 MediaArea 的模块生成脚手架后,我编辑了我的路由以包含此规则:

_welcome:
    pattern:  /
    defaults: { _controller: VNNPressboxBundle:MediaArea:new }

当我在浏览器中访问该页面时,出现以下错误:

在渲染模板期间引发了异常 (“路由“mediaarea_create”不存在。”)

当我创建路线时,错误自然会消失。路线如下:

mediaarea_create:
    pattern:  /foo
    defaults: { _controller: VNNPressboxBundle:MediaArea:create }

所以我可以手动创建我需要的所有路线 - mediaarea_createmediaarea_index 等 - 但那将是愚蠢的。有没有办法告诉 Symfony 我有所有这些需要工作的 mediaarea 路由?

【问题讨论】:

  • 您是否尝试将 CRUD 生成器生成的路由(并放入您的包中)附加到主应用程序 routing.yml 文件?或者你是想让 Symfony 自动承担 crud 路线?
  • 回答你的第一个问题,我找不到任何证据表明 CRUD 生成器生成了任何路由。如果是这样,我不在乎他们在哪里工作,只要他们工作。对于您的第二个问题,如果这样做会很好,但我的主要追求是在这种情况下找到处理路由的“正确”方式。
  • 我会在您的 src/{namespaceName}/{bundleName}/Resources/config 文件夹中检查任何生成的路由。如果那里什么都没有,您可能需要手动创建路线。有一种方法可以让 symfony 自动创建它们。如果不使用 FOSRestBundle,我不能 100% 确定如何做到这一点:github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Routing/…,但您可以查看他们的捆绑包,了解他们是如何做到的。
  • 我确实找到了src/VNN/PressboxBundle/Resources/config/routing.yml,但其中没有生成路由。我将查看 FOSRestBundle。谢谢。
  • 为什么设计网址会很笨?

标签: symfony url-routing


【解决方案1】:

编辑:好的,可能无法回答问题,这只是一个长评论......

为什么不使用带有注释的abstract 基本控制器

abstract class AbstractCrudController extends Controller
{

    /**
     * @Route("/show/{slug}")
     * @Method("GET")
     * @Template
     */
    public function showAction($slug) { /* Do stuff */ }
}

class MediaController extends AbstractCrudController { }
class UserController  extends AbstractCrudController { }

如果您的子类需要不同的行为,您始终可以覆盖showAction()添加任何您想要的操作。然后你只需要在你的routing.yml 中导入MediaControllerUserController(每个控制器只需要一个导入):

somename1:
    resource: "@AcmeHelloBundle/Controller/MediaController.php"
    type: annotation
    prefix: /media

somename2:
    resource: "@AcmeHelloBundle/Controller/UserController.php"
    type: annotation
    prefix: /user

然后您的路线会自动变为acme_hello_media_showacme_hello_user_show。调试:

php app/console router:debug

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 2013-07-27
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多