2016-04-05 12 views
-1

Ich möchte einen benutzerdefinierten Helfer in meiner Anwendung verwenden.So deklarieren Sie einen Helfer in Symfony 2

habe ich die Datei Myhelper.php in Bundle/Helper/Myhelper.php mit

namespace Project\Bundle\Helper; 

class Myhelper { 

    public function __construct($doctrine) { 

     $this->doctrine = $doctrine; 

    } 

    function testMyHelper() { 

     return "hi"; 

    } 

} 

Und ich versuchte, es in meinem Controller zu nennen:

$myHelper = $this->get('Myhelper'); 

Aber ich habe die folgenden Fehler :

An exception has been thrown during the rendering of a template ("You have requested a non-existent service "myhelper".")

Muss ich es in einer bestimmten Konfigurationsdatei deklarieren?

Thx

Antwort

2

Wenn Sie die Funktion $controller->get($id) aufrufen, handelt es sich um einen Dienst, der unter $id registriert ist. Wenn Sie diese Helfer in einem Controller verwenden möchten, müssen Sie es als Dienst in service.yml-Datei registrieren (oder xml, php, was auch immer Sie für Service-Deklarationen verwenden)

# app/config/services.yml 
services: 
    app.helpers.my_helper: # the ID of the service user to get id 
     class:  Project\Bundle\Helper\MyHelper 
     arguments: ['@doctrine'] 

Dann können Sie $this->get('app.helpers.my_helper'); rufen Sie den Service zu erhalten Beispiel.

Wenn Sie es nicht in der Steuerung verwendet werden soll, sondern auch im Zweig, müssen Sie es als Zweig Erweiterung injizieren und Ihren Service durch Dependency Injection injizieren:

# app/config/services.yml 
services: 
    app.twig_extension: 
     class: AppBundle\Twig\AppExtension 
     public: false 
     arguments: ['@app_helpers.my_helper'] 
     tags: 
      - { name: twig.extension } 

Sie können mehr über diese in symfony lesen Service container documentation und Twig extension documentation

2

Sie die Definition von Service auf symfony sehen sollte. (siehe: http://symfony.com/doc/current/book/service_container.html, die genau erklärt, wie man einen Service implementiert (Verwendung durch den Container)).

für Ihr Beispiel:

# app/config/services.yml 
 
services: 
 
    myhelper: 
 
     class:  YourClass 
 
     arguments: [@theservicedepedents]

Dann rufen Sie es in Ihrem Controller über $ this-> get ('myhelper')

1

Sie versuchen Helfer als Service zu nutzen. Wenn Sie Helfer als Klasse mit statischer Methode erstellen möchten, funktioniert Ihre Implementierung. In Ihrem Beispiel sollten Sie die Klasse als Dienst registrieren. Wie funktioniert Dienstleistungen können Sie in offiziellen Symfony documentation lesen.

0

Ich brauche wissen, in welchem ​​Fall Sie einen Helfer verwenden möchten?

Symfony ist so strukturiert, dass diese Art von Werkzeugen nie benötigt wird. Vielleicht haben Sie ein Problem in der Konzeption des Projekts oder vielleicht wussten Sie einige Werkzeuge nicht.

+0

Schließlich benutze ich es als Dienst, es ist Benachrichtigungen in der Datenbank von jedem Controller zu füllen – Paul