我查找了一些解决方案,但都没有找到适合我的问题。
在一个控制器中,我创建另一个控制器的实例
//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的实例是否存在问题,或者我在做什么错?
您可以将控制器定义为服务,然后在另一个控制器中获取它。
在您services.yml
定义所需的控制器即服务中:
services:
your_service_name:
class: YourCompany\YourBundle\Controller\YourController
然后,在任何控制器中,您都可以通过容器获取此服务:
$yourController = $this->get('your_service_name');
在文档中有一些关于“控制器即服务”的有用信息。
OP的注解
这个答案是完全正确的,我只想添加一些内容,所以这个答案可以100%罚款!
在将Controller更改为Service后,缺少服务容器,请在此参考此问题。
要设置容器以及SF2的全部功能,您需要在service.yml中添加一行。
services:
mail_controller:
class: YourCompany\YourBundle\Controller\YourController
calls:
- [ setContainer, [ @service_container ]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句