Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从控制器symfony2内部跳到另一个控制器_Symfony - Fatal编程技术网

从控制器symfony2内部跳到另一个控制器

从控制器symfony2内部跳到另一个控制器,symfony,Symfony,我使用的是symfony2.8。 我想从另一个控制器跳到控制器。这怎么可能 下面是我的源代码 DefaultController.php class DefaultController extends Controller public function myFirstAction(){ // do something if ($a = 1){ $this->mySecondAction() // error } else {

我使用的是symfony2.8。 我想从另一个控制器跳到控制器。这怎么可能

下面是我的源代码

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 

所有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());
}

所有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());
}

如果您想跳转到另一个控制器,您可以将其定义为服务,但是如果您在同一控制器中具有功能,则可以使用@AmericanUmlaut-answer

将控制器定义为服务,获取函数“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());
}

如果您想跳转到另一个控制器,您可以将其定义为服务,但是如果您在同一控制器中具有功能,则可以使用@AmericanUmlaut-answer

将控制器定义为服务,获取函数“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());
}

在我的情况下,@AmericanUmlaut way就足够了,但是你的答案适合进一步学习或有人需要,非常感谢。在我的情况下,@AmericanUmlaut way就足够了,但是你的答案适合进一步学习或有人需要,非常感谢。