0
votes

Dans Symfony, comment appeler la fonction de contrôleur dans Menubuilder?

J'ai écrit une fonction comme getAccess () dans le fichier de contrôleur appbundle / contrôleur / backendcontroller.php . .

Je veux accéder à la méthode de cette contrôleur dans menu / menubuilder.php fichier. Comment puis-je faire ça?

menu et dossiers AppBundle sont au même niveau.


1 commentaires

Vous devez extraire cette fonction GetAccess () dans un service séparé et transmettez-la par injection de dépendance.


3 Réponses :


2
votes

Pour moi, un contrôleur ne peut pas être appelé à Menubuilder et ce ne serait pas "propre". Je vous suggère de créer un gestionnaire ou un service contenant cette fonction et appelez votre service dans votre contrôleur et dans Menubuilder.

namespace App\Service;

class MessageGenerator
{
    public function getHappyMessage()
    {
        $messages = [
            'You did it! You updated the system! Amazing!',
            'That was one of the coolest updates I\'ve seen all day!',
            'Great work! Keep going!',
        ];

        $index = array_rand($messages);

        return $messages[$index];
    }
}


4 commentaires

La version symfony est 3.4


Bien que la suggestion d'extraction d'avoir accès à son propre service est bonne, le code affiché ne semble pas pertinent.


C'est un exemple que je vais mettre en réponse ce qu'il aurait pu faire de son côté, mais pouvons-nous voir le code de GetAccess ()?


@ Heyden7611, merci .. :)



5
votes

Vous pouvez utiliser Trait

Les traits sont un Mécanisme de réutilisation du code dans des langages de héritage unique tels que PHP. Un trait est destiné à réduire certaines limitations d'héritage unique en permettant à un développeur de réutiliser des ensembles de méthodes librement dans plusieurs classes indépendantes vivant dans différentes hiérarchies de classe. p>

Donc, vous pouvez créer votre fonction GetAccess () dans le fichier de trait et simplement l'utiliser dans BackendController.php et menubuilder.php P>

trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}


0 commentaires

0
votes

J'ai créé un service comme suit: xxx

et ajouté le code suivant dans services.yml: xxx

Il fonctionne comme prévu.


0 commentaires