我有一个表单生成器类,它继承自AbstractType,我需要解决这样的路径:
- $uri = $router->generate('blog_show',array('slug' => 'my-blog-post'));
由于该类不是Controller的子级,因此无法访问路由器.有任何想法吗?
在建设时间将路由器传递给班级怎么样?
您可以通过构造函数将路由器服务传递给表单类型.使用form.type标记将您的表单注册为服务,并将路由器服务注入其中.
- <?PHP
- namespace Vendor\Bundle\AppBundle\Form\Type;
- use Symfony\Component\Form\AbstractType;
- use Symfony\Bundle\FrameworkBundle\Routing\Router;
- class PostType extends AbstractType
- {
- /**
- * @var Router
- */
- private $router;
- /**
- * @param Router
- */
- public function __construct(Router $router)
- {
- $this->router = $router;
- }
- /**
- * @return string
- */
- public function getName()
- {
- return 'post';
- }
- // ...
- }
将其注册为服务:
- services:
- form.type.post:
- class: Vendor\Bundle\AppBundle\Form\Type\PostType
- arguments: [ @router ]
- tags:
- - { name: form.type }
并在你的控制器中使用它像这样:
- public function addAction(Request $request)
- {
- $post = new Post();
- $form = $this->createForm('post',$post);
- // ...
- }
由于您使用form.type标记将表单类型注册为服务,因此您只需使用其名称而不是新的PostType().您可以在您的类型中以$this->路由器的形式访问路由器服务.