2013-10-19 51 views
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 

回答

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

+0

感謝蒂姆,但在我UserBundle需要的services.xml。 – whitebear

+0

我將信息添加到文章中。請幫助我,如果您有時間/ – whitebear

+0

對不起,'轉發'只適用於另一個控制器。 – Tim

2

當你在一個控制器使用

$this->renderView(); 

,您使用的快捷方式

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

所以,如果你只是注入的symfony的模板的貢獻莫過於在另一個類,你可以在那裏使用的RenderView。

更詳細地就在symfony的文檔:http://symfony.com/doc/current/book/templating.html

0

你應該使用這個

$this->container->get('templating')->renderResponse('AcmeMemberBundle:Default:firstemailtocustomer.txt.twig',array('user' => $user))->getContent(); 
相關問題