2017-02-01 4 views
0

Я использую symfony2.8. Я хотел бы перейти к контроллеру с другого контроллера. Как это возможно?jumpt к другому контроллеру изнутри контроллера symfony2

Это мой исходный код ниже

DefaultController.php

class DefaultController extends Controller 
    public function myFirstAction(){ 
    // do something 
    if ($a = 1){ 
     $this->mySecondAction() // error 
    } 
    else { 
     return $this->render('AcmeMemberBundle:Default:myFirst.html.twig',array()); 
    } 
} 

public function mySecondAction(){ 
    //do something 
     return $this->render('AcmeMemberBundle:Default:mySecond.html.twig',array()); 
} 

$ this-> mySecondAction() показывает ошибку как

Catchable Fatal Error: Argument 1 passed to Acme\MemberBundle\Controller\DefaultController::secondAction() must be an instance of Symfony\Component\HttpFoundation\Request, none given, called in 

ответ

2

Все действия Symfony передаются экземпляр запроса. Вы должны устранить эту ошибку, добавив соответствующий параметр в обе функции действия и передав ее при вызове mySecondAction()

Кроме того, не забудьте, что действия должны возвращать ответ, вы не возвращаете результат mySecondAction() в вашем коде.

use Symfony\Component\HttpFoundation\Request; 

class DefaultController extends Controller 
    public function myFirstAction(Request $request){ 
    // do something 
    if ($a = 1){ 
     return $this->mySecondAction($request) // Note the return I added here 
    } 
    else { 
     return $this->render('AcmeMemberBundle:Default:myFirst.html.twig',array()); 
    } 
} 

public function mySecondAction(Request $request){ 
    //do something 
     return $this->render('AcmeMemberBundle:Default:mySecond.html.twig',array()); 
} 
+0

Спасибо. Это просто решает мою проблему. – whitebear

1

Если вы хотите, чтобы jumpt другой контроллер, вы можете определить его в качестве службы, однако если у вас есть функции в одном контроллере можно использовать @AmericanUmlaut ответ.

Определить контроллер в качестве службы и получить функцию 'mySecondAction() и с помощью сервиса определено ранее, например:

Затем вы можете определить его как сервис следующим образом: services.yml файл

services: 
app.mySecondAction: 
    class: AppBundle\Controller\DefaultController 
    calls: 
     - [setContainer, ["@service_container"]] 

контроллер:

public function myFirstAction() { 
    // do something  
    if ($a = 1) { 
     //using the service previously defined 
     $service = $this->get('app.mySecondAction'); 
     return $service->mySecondAction();   
    } else { 
     return $this->render('AcmeMemberBundle:Default:myFirst.html.twig', array()); 
    } 
} 

public function mySecondAction(){ 
    //do something 
    return $this->render('AcmeMemberBundle:Default:mySecond.html.twig',array()); 
} 
+0

В моем случае @AmericanUmlaut путь достаточно, однако ваш ответ хорош для дальнейшего изучения, или кому-то это нужно, большое вам спасибо. – whitebear

Смежные вопросы