我已经使用Symfony很长一段时间但我是Symfony2的新手。使用CRUD生成器为名为MediaArea
的模块生成脚手架后,我编辑了路由以包含此规则:
_welcome:
pattern: /
defaults: { _controller: VNNPressboxBundle:MediaArea:new }
当我在浏览器中访问该页面时,出现此错误:
在渲染模板期间抛出了异常 (“Route”mediaarea_create“不存在。”)
当我创建路线时,自然会错误消失。这是路线:
mediaarea_create:
pattern: /foo
defaults: { _controller: VNNPressboxBundle:MediaArea:create }
所以我可以手动创建我需要的所有路线 - mediaarea_create
,mediaarea_index
等等 - 但那会很愚蠢。有没有办法告诉Symfony我有我需要工作的所有这些mediaarea
路线?
答案 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
中导入UserController
和routing.yml
(每个控制器只需一次导入):
somename1:
resource: "@AcmeHelloBundle/Controller/MediaController.php"
type: annotation
prefix: /media
somename2:
resource: "@AcmeHelloBundle/Controller/UserController.php"
type: annotation
prefix: /user
您的路线会自动成为acme_hello_media_show
和acme_hello_user_show
。调试:
php app/console router:debug