在Symfony2中以干燥的方式创建路由

时间:2012-03-26 22:12:28

标签: symfony url-routing

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

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

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

  

在渲染模板期间抛出了异常   (“Route”mediaarea_create“不存在。”)

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

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

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

1 个答案:

答案 0 :(得分: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()添加任何操作。然后,您只需要在MediaController中导入UserControllerrouting.yml(每个控制器只需一次导入):

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
相关问题