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

Service として使用できる Controller を作成します。

# 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 に答える