web-dev-qa-db-fra.com

Comment accéder à un autre contrôleur depuis l'intérieur d'un contrôleur Symfony2

J'ai besoin d'accéder à une méthode à partir d'un autre contrôleur à l'intérieur d'un autre contrôleur. Comment puis-je le faire? Puis-je utiliser this->get méthode?

Puis-je inclure le contrôleur dans mon contrôleur actuel et en faire un objet et accéder à la méthode via l'objet? Est-ce "ok" de le faire de cette façon?

Je veux appeler la méthode de formulaire --- newAction de l'autre contrôleur.

35
chirag7jain

Vous pouvez définir votre contrôleur comme service, puis le récupérer dans un autre contrôleur.

Dans votre services.yml définir le contrôleur nécessaire en tant que service:

services:
    your_service_name:
        class: YourCompany\YourBundle\Controller\YourController

Ensuite, dans n'importe quel contrôleur, vous pourrez obtenir ce service via un conteneur:

$yourController = $this->get('your_service_name');

Il y a quelques informations utiles sur Contrôleurs en tant que services dans la documentation

39
Vitalii Zurian

Si vous ne voulez pas définir la classe comme un service, car cela ne me semble pas être une bonne pratique et @Qoop l'a cité Fabien dit la même chose , vous pouvez utiliser le transfert:

http://symfony.com/doc/current/controller/forwarding.html

public function indexAction($name)
{
    $response = $this->forward('AcmeHelloBundle:Hello:fancy', array(
        'name'  => $name,
        'color' => 'green',
    ));

    // ... further modify the response or return it directly

    return $response;
}

Si vous avez besoin d'incorporer la sortie d'une action de contrôleur interne dans un modèle, la documentation pour Symfony a également quelque chose pour cela.

65
SimonSimCity