Symfony 使用控制器类';另一类中的s方法

Symfony 使用控制器类';另一类中的s方法,symfony,Symfony,我想使用renderView() 在控制器以外的类中 class RegistrationFormHandler extends BaseRegistrationFormHandler { protected function onSuccess(UserInterface $user, $confirmation) { $messaggio = \Swift_Message::newInstance() ... ->s

我想使用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)));
它工作得很好

我想我应该得到控制器类的实例

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>
但是它说,

FatalErrorException: Error: Call to undefined method Acme\UserBundle\Form\Handler\RegistrationFormHandler::forward() in 

创建一个您可以使用的控制器

然后打电话:

$this->forward('acme.hello.controller:mainAction');

RegistrationFormHandler

创建一个控制器,您可以

然后打电话:

$this->forward('acme.hello.controller:mainAction');
当您使用

$this->renderView();
在控制器中,您使用的是

$this->container->get('templating')->renderView();
因此,如果您只是在另一个类中注入symfony的模板服务,您可以从那里使用renderView

更多详细信息,请参阅symfony文档:

当您使用

$this->renderView();
在控制器中,您使用的是

$this->container->get('templating')->renderView();
因此,如果您只是在另一个类中注入symfony的模板服务,您可以从那里使用renderView

更多详细信息请参见symfony文档:

您应该使用此

$this->container->get('templating')->renderResponse('AcmeMemberBundle:Default:firstemailtocustomer.txt.twig',array('user' => $user))->getContent();
你应该用这个

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

谢谢Tim,但是在我的UserBundle中需要services.xml。我在文章中添加了这些信息。如果您有时间,请帮助我/我认为您应该只从控制器内部调用
renderView()
——您必须在某个地方有一个加载表单验证类的控制器。validation类应该只执行验证,并向控制器返回一个
boolean
,然后您可以在控制器中呈现视图。我在另一个类(RegistrationFormHandler)中调用forward。您认为我的xml语法正确吗?我不确定xml或php脚本中哪里存在错误。啊,我知道这是php错误,但我不确定我的xml symtax是否正确,注入是否集体设置,但在我的UserBundle中需要services.xml。我已将信息添加到文章中。如果您有时间,请帮助我/我认为您应该只调用
renderView()
从控制器内部-您必须在加载表单验证类的某个位置有一个控制器。validation类应该只执行验证,并向控制器返回一个
boolean
,然后您可以在控制器中呈现视图。我在另一个类(RegistrationFormHandler)中调用forward。您认为我的xml语法正确吗?我不确定xml或php脚本中哪里存在错误。啊,我理解这是php错误,但我不确定我的xml symtax是否正确,以及注入是否集体设置