我查找了一些解决方案,但没有找到适合我的问题的解决方案。
在一个控制器中我创建另一个控制器的实例
//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
是控制器的一个实例。
生成这样的控制器实例是否存在问题或者我做错了什么?
您可以将控制器定义为服务,然后将其获取到另一个控制器中。
In 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 ]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)