Intereting Posts
почему функция php mail не работает в xampp Каков наилучший способ обработки рекурсии в smarty? Количество столбцов MySQL не соответствует количеству значений в строке 1 POST на веб-страницу в vb.net (формы выигрыша, рабочий стол, а не ASP.net) Объект не уничтожается до конца скрипта, если он регистрирует spl_autoload_register (); Невозможно получить отношение от одного до многих в Laravel 4 Отправить письмо (серверная сторона, а не mailto) при нажатии кнопки html Ошибка PHP / CURL – Stripe TLS 1.0 отправка запроса календаря по почте минимизировать выбор запросов в той же таблице Mysql codeIgniter: потеря данных сеанса после входа в систему Отображение правильного ответа в Postman, но неправильный ответ в приложении для Android Замена PEAR: MDB2 на PHP 5.3 Чтение данных в последовательном порту на окнах с php Как изменить время на сервере Apache, чтобы оно соответствовало времени компьютера (PHP)?

Ошибка Symfony 2: вызов функции-члена get () для не-объекта

Я искал некоторые решения, но ни одна из найденных не соответствовала моей проблеме.

В одном контроллере я создаю экземпляр другого контроллера

//Controller1 $mailController = new MailController(); $mailController->newCommentMail($entity, $em); 

В MailController я хочу создать URL-адрес и отправить электронное письмо

 $url = $this->generateUrl('path', array('turnId' => $data->getPoi()->getId(), 'poiId' => $data->getPoi()->getTurn()->getId())); $this->get('mailer')->send($mail); 

Эти две строки вызывают следующую ошибку:

 Error: Call to a member function get() on a non-object 

Но моя IDE указывает, что $this экземпляр контроллера.

Есть ли проблема с генерацией экземпляра такого контроллера или что я делаю неправильно?

Вы можете определить свой контроллер как службу, а затем получить его на другом контроллере.

В your services.yml определите необходимый контроллер как услугу:

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

Затем в любом контроллере вы сможете получить эту услугу через контейнер:

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

Существует некоторая полезная информация о контроллерах как услуги в документации

Примечание от OP

Этот ответ абсолютно прав, я просто хочу добавить что-то, чтобы этот ответ работал на 100% отлично!

После того, как я изменил контроллер на службу, контейнер службы отсутствовал, ссылаясь на этот вопрос здесь .

Чтобы установить контейнер, и при этом полная функциональность SF2, вам нужно добавить одну строку в service.yml

 services: mail_controller: class: YourCompany\YourBundle\Controller\YourController calls: - [ setContainer, [ @service_container ]] 
 $this->container->get('mailer'); 

работает?

столкнулся с этой проблемой … но добавив это в службу диспетчера, решил это для меня

 calls: - [setContainer, ["@service_container"]]