Bạn có thể chuyển dịch vụ router
qua hàm tạo cho loại biểu mẫu của bạn. Đăng ký biểu mẫu của bạn dưới dạng dịch vụ với thẻ form.type
và tiêm dịch vụ router
vào đó.
<?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';
}
// ...
}
đăng ký nó như là một dịch vụ:
services:
form.type.post:
class: Vendor\Bundle\AppBundle\Form\Type\PostType
arguments: [ @router ]
tags:
- { name: form.type }
Và sử dụng nó trong điều khiển của bạn như thế này:
public function addAction(Request $request)
{
$post = new Post();
$form = $this->createForm('post', $post);
// ...
}
Vì bạn đã đăng ký loại hình thức của bạn như một dịch vụ với thẻ form.type
, bạn chỉ có thể sử dụng tên của nó thay vì new PostType()
. Và bạn có thể truy cập dịch vụ router
dưới dạng $this->router
trong loại của bạn.
Nguồn
2012-03-26 12:16:28
Bạn có thể chỉ định mã phiên bản mẫu php cho 'arguments: [@router]'? –
Xem tab PHP trong [phần này] (http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services). –