对成员函数的调用在null(呈现方法)Symfony上具有()
我有两个包: 1) 带有类RememberController的UserBundle对成员函数的调用在null(呈现方法)Symfony上具有(),symfony,Symfony,我有两个包: 1) 带有类RememberController的UserBundle namespace UserBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RedirectResponse; use MailEventBu
namespace UserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use MailEventBundle\Controller\MailEventController;
class RememberController extends Controller
{
public function rememberAction(Request $request)
{
if($request->get('email') != null){
$params =
[
'email' => $request->get('email'),
'subject' => 'Remind password',
'template' => 'template/remember.html',
'values' => array(
'password' => md5($request->get('email') . date("l dS of F Y h:i:s A"))
)
];
$MailEventController = new MailEventController();
$MailEventController->mailGenerator($params);
return new Response(
'Almost ok',
Response::HTTP_OK
);
}
}
}
如果我在这个类中调用render方法,一切都很好!但若我在MailEventController中调用render方法,我会错误地调用一个成员函数has(),并且调用$this->container并从MailEventController返回null
namespace MailEventBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MailEventController extends Controller
{
private function sendAction($message)
{
try {
$this->get('mailer')->send($message);
return true;
} catch (\Swift_TransportException $e) {
return $e;
}
}
public function mailGenerator($params)
{
$message = \Swift_Message::newInstance()
->setSubject($params['subject'])
->setFrom('email@email.com')
->setTo($params['email'])
->setBody(
$this->renderView( // error here
$params['template'],
$params['values']
),
'text/html'
);
return $this->sendAction($message);
}
}
2) MailEventController
namespace MailEventBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MailEventController extends Controller
{
private function sendAction($message)
{
try {
$this->get('mailer')->send($message);
return true;
} catch (\Swift_TransportException $e) {
return $e;
}
}
public function mailGenerator($params)
{
$message = \Swift_Message::newInstance()
->setSubject($params['subject'])
->setFrom('email@email.com')
->setTo($params['email'])
->setBody(
$this->renderView( // error here
$params['template'],
$params['values']
),
'text/html'
);
return $this->sendAction($message);
}
}
如何解决此问题?
$MailEventController=new MailEventController()代码>这不是使用控制器的方式。你的MalEventController应该做什么?它扩展了基本的Symfony控制器,但它看起来不像是MVC框架意义上的实际控制器?看起来它应该是一个服务。在控制器必须返回响应的前提下,您应该使用DI服务来处理可重用逻辑,而不是控制器方法。你应该更深入地阅读文档。是的,这是一项服务,但我是以捆绑的形式编写的,而且该服务可以有一个呈现方法?是否有正确实施的示例?不,这不是正确实施的示例。真正混淆了控制器和其他服务的概念。请查看手册中的“服务”部分。话虽如此,我想你可以用$MailEventController->setContainer($this->container)作弊;但不要那样做。