我想使用renderView() 在除了Controller之外的其他课程中。
class RegistrationFormHandler extends BaseRegistrationFormHandler
{
protected function onSuccess(UserInterface $user, $confirmation)
{
$messaggio = \Swift_Message::newInstance()
...
->setBody($this->renderView('AcmeMemberBundle:Default:firstemailtocustomer.txt.twig',array('user' => $user)));
显示
FatalErrorException: Error: Call to undefined method Acme\UserBundle\Form\Handler\RegistrationFormHandler::renderView() in
但是如果你在控制器类中尝试相同的方法。
class DefaultController extends Controller
{
public function mainAction(){
$messaggio = \Swift_Message::newInstance()
...
->setBody($this->renderView('AcmeMemberBundle:Default:firstemailtocustomer.txt.twig',array('user' => $user)));
效果很好。
我想我应该得到控制器类的实例。
我怎么能解决这个问题?
感谢蒂姆的回答。
我将此添加到services.xml
<service id="acme.default.controller" class="Acme\MemberBundle\Controller\DefaultController" public="false">
<argument>acme.controller.default.class</argument>
</service>
并像这样使用
->setBody($this->forward('acme.controller.default.class')->renderView('AcmeMemberBundle:Default:firstemailtocustomer.txt.twig',array('user' => $user)));
但它说,
FatalErrorException: Error: Call to undefined method Acme\UserBundle\Form\Handler\RegistrationFormHandler::forward() in
答案 0 :(得分:2)
创建一个控制器,您可以use as a Service。
# src/Acme/UserBundle/Resources/config/services.yml
parameters:
# ...
acme.controller.default.class: Acme\HelloBundle\Controller\UserController
services:
acme.hello.controller:
class: "%acme.controller.default.class%"
然后致电:
$this->forward('acme.hello.controller:mainAction');
来自RegistrationFormHandler
。
答案 1 :(得分:2)
使用时
$this->renderView();
在控制器中,您正在使用
的快捷方式$this->container->get('templating')->renderView();
因此,如果你只是在另一个类中注入symfony的模板serice,你可以从那里使用renderView。
在symfony文档中更详细地说:http://symfony.com/doc/current/book/templating.html
答案 2 :(得分:0)
你应该使用这个
$this->container->get('templating')->renderResponse('AcmeMemberBundle:Default:firstemailtocustomer.txt.twig',array('user' => $user))->getContent();