Sie können den router
-Dienst über Konstruktor an Ihren Formulartyp übergeben. Registrieren Sie Ihr Formular als Service mit dem Tag form.type
und injizieren Sie den Service router
.
<?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';
}
// ...
}
als Service registrieren:
services:
form.type.post:
class: Vendor\Bundle\AppBundle\Form\Type\PostType
arguments: [ @router ]
tags:
- { name: form.type }
und verwenden Sie es in Ihrem Controller wie folgt aus:
public function addAction(Request $request)
{
$post = new Post();
$form = $this->createForm('post', $post);
// ...
}
Da Sie Ihren Formulartyp als Dienst mit dem Tag form.type
registriert, Sie können einfach seinen Namen anstelle von new PostType()
verwenden. Und Sie können auf den router
Service als $this->router
in Ihrem Typ zugreifen.
Können Sie den PHP-Template-Versionscode für Argumente angeben: [@router] '? –
Siehe die Registerkarte PHP in [diesem Abschnitt] (http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services). –