php - 交响乐 2 错误 : Call to a member function get() on a non-object

标签 php symfony

我查找了一些解决方案,但没有找到适合我的问题。

在一个 Controller 中我创建另一个 Controller 的实例

//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 是 Controller 的一个实例。

生成这样的 Controller 实例是否有问题,或者我做错了什么?

最佳答案

您可以将您的 Controller 定义为服务,然后在另一个 Controller 中获取它。

在您的 services.yml 中将所需的 Controller 定义为服务:

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

然后在任何 Controller 中,您都可以通过容器获得此服务:

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

有一些关于 Controllers as Services 的有用信息在文档中

OP 的注释

这个答案是完全正确的,我只是想添加一些东西,这样这个答案就可以 100% 正常工作!

在我将 Controller 更改为服务后,服务容器丢失,引用 this Question here .

要设置容器,并使用 SF2 的全部功能,您需要在 service.yml 中添加一行

services:
    mail_controller:
        class: YourCompany\YourBundle\Controller\YourController
        calls:
            - [ setContainer, [ @service_container ]]

关于php - 交响乐 2 错误 : Call to a member function get() on a non-object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24889961/

相关文章:

orm - 从 Yii 中的模型生成数据库模式

php - 选项 "constraints"不存在

php - Symfony2 子表单事件传播

php - 在 CodeIgniter 中加入查询

php - 无法使用 jquery 检索 json 数据

php - cloud9,无法安装 php cURL

php - 获取项目更新的mysql结果

php - SymfonyRequirements.php 的变化应该包含在版本控制中吗?

php - 在dockblock中@file标签是什么意思

security - Symfony2 安全.yml