2016-04-09 15 views
0

Ich möchte einen Helfer von meinem Service anrufen.Rufen Sie einen Helfer von einem Service an

$notificationService = $this->get('Notification'); 

Versuchte namens eine undefinierte Methode aufrufen "get" der Klasse

+0

Wo nennen Sie diese Methode? Kannst du deine Klasse teilen? – Federkun

+0

Es ist in Ordnung, ich habe meinen Dienst im Kopf mit 'app \ Bundle \ Services \ Notification;' deklarieren und instanziiert es $ notificationService = new Notification(); ' – Paul

Antwort

3

Symfony ist keine Zauberei. Symfony ist nur PHP. Das ist das Wichtigste, an das man sich bei der Arbeit mit Symfony erinnern sollte.

Wenn es also keine get() Methode in Ihrer Klasse gibt, können Sie die Methode nicht aufrufen. In Ihrem Controller reichen Sie von einer Basis Controller des FrameworkBundle. Diese Klasse enthält eine solche Methode. Sie können diese Methode also in einem Controller aufrufen.

Nun möchten Sie den Dienst Notification in Ihrem neuen Dienst weiterhin verwenden. Anstatt es aus dem Container zu holen, lassen Sie es vom Container in Ihren Service injizieren, wenn es erstellt wird. Sie tun dies mit einigem Service config:

# app/config/services.yml 
services: 
    app.your_service: 
     class: AppBundle\Some\Class 
     arguments: ['@Notification'] # <<-- this tells to inject the service 

Und dann diese in Ihrer Klasse anzupassen:

class SomeClass 
{ 
    private $nofication; 

    public function __construct(NotificationInterface $notification) 
    { 
     $this->notification = $notification; 
    } 
} 

Es gibt viel mehr darüber zu erklären. Siehe http://symfony.com/doc/current/book/service_container

Verwandte Themen