1

我想在 Controller 以外的其他类中使用 renderView()。

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 
4

3 回答 3

2

当你使用

$this->renderView();

在控制器中,您正在使用快捷方式

$this->container->get('templating')->renderView();

所以如果你只是在另一个类中注入 symfony 的模板服务,你可以从那里使用 renderView。

symfony 文档中的更多详细信息:http: //symfony.com/doc/current/book/templating.html

于 2013-10-19T06:48:35.550 回答
2

创建一个可以用作服务的控制器。

# 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.

于 2013-10-19T06:25:25.173 回答
0

你应该使用这个

$this->container->get('templating')->renderResponse('AcmeMemberBundle:Default:firstemailtocustomer.txt.twig',array('user' => $user))->getContent();
于 2016-05-11T08:27:04.233 回答