在我的symfony项目中,我尝试配置电子邮件控制器但没有成功 .
services.yml
emailController:
class: AppBundle\Controller\emailController
public: true
arguments:
$mailer: '@mailer'
emailController.php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\UserBundle\FOSUserEvents;
use Doctrine\ORM\EntityManagerInterface;
class emailController extends Controller
{
protected $mailer;
function __construct(\Swift_Mailer $mailer) {
$this->mailer = $mailer;
}
public function sendMail($email){
$message = (new \Swift_Message())
->setSubject('send mail')
->setFrom('xx@yy.com')
->setTo($email)
->setBody('TEST')
->setContentType("text/html");
$this->mailer->send($message);
return 1;
}
}
Symfony返回此消息:
Catchable致命错误:传递给AppBundle \ Controller \ emailController :: __ construct()的参数1必须是Swift_Mailer的一个实例,没有给出,
我尝试了一些配置和选项,但没有成功
2 回答
您将控制器定义为一种服务,而不是它的意图,而是什么;控制器和服务都是普通的PHP类 .
无论如何,前面提到的错误消息说明了一切,你的服务定义需要提供正确的参数(没有给出),例如像那样:
请试试这个 .
我认为问题在于,您正在将控制器配置为服务,但您的路由器可能不会引用已配置的服务,只会引用类名 .
您可以使用注释:
或典型的yaml格式将控制器称为服务:
请注意,两者都是指上面定义中指定的服务ID,而不是实际的类名 . 您可以在文档中阅读有关控制器概念的更多信息:https://symfony.com/doc/current/controller/service.html
edit: 作为旁注,因为您似乎使用了新的Symfony版本,您可能希望使用
resolve_controller_arguments
标签检查注入服务的直接操作:https://symfony.com/doc/current/controller.html#fetching-services-as-controller-arguments