2016-04-09 2 views
0

Я хотел бы позвонить помощнику из службы.Вызовите помощника из службы

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

Пытались вызвать неопределенный метод под названием "получить" класса

+0

Где вы называете этот метод? Можете ли вы поделиться своим классом? – Federkun

+0

Все в порядке, я объявляю свою службу в голове с помощью 'use App \ Bundle \ Services \ Notification;' и создавал экземпляр '$ notificationService = new Notification();' – Paul

ответ

3

Symfony это не волшебство. Symfony - это просто PHP. Это самое главное, что нужно помнить при работе с Symfony.

Так что, если в вашем классе нет метода get(), вы не можете вызвать метод. В вашем контроллере вы простираетесь от базы Controller от FrameworkBundle. Этот класс содержит такой метод, поэтому в контроллере вы можете вызвать этот метод.

Теперь вы все еще хотите воспользоваться услугой Notification в своем новом сервисе. Вместо того, чтобы получать его из контейнера, пусть контейнер вставляет его в вашу службу, когда он его создает. Вы можете сделать это с какой-то службы конфигурации:

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

А затем адаптировать это в вашем классе:

class SomeClass 
{ 
    private $nofication; 

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

Существует намного больше, чтобы объяснить об этом. См. http://symfony.com/doc/current/book/service_container

Смежные вопросы