【问题标题】:How to pass instance of Request from a controller function to another controller function如何将请求实例从控制器函数传递到另一个控制器函数
【发布时间】:2021-07-09 22:08:48
【问题描述】:

我必须从一个控制器调用另一个控制器的函数。

public function getquickviews(Request $request){
     $report = new ReportController();
     $report ->Applications($request->except('cl_e_start_date'));//it's not working its giving me error that it expect and instance of Request and passed array()
}



    public function Applications(Request $request) 
    {
/*APP USAGE*/
     }

我必须将请求实例传递给应用程序函数。但是我不想从 getquickviews 请求中传递所有参数的问题就像我在 getquickviews 函数上收到电子邮件、电话、姓名但我只需要将电话、电子邮件传递给应用程序函数。

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.3


    【解决方案1】:

    您需要创建一个新的 Request 实例。

    public function getquickviews(Request $request){
     $report = new ReportController();
     $content = new Request();
     $content->something = $request->something;
     $content->somethingElse = $request->somethingElse;
     $report ->Applications($content);
     }
    

    然后你必须收到它:

    public function Applications(Request $request) 
    {
    /*APP USAGE*/
     }
    

    就是这样。 问候。

    【讨论】:

    • 在 Laravel 7 中这个问题(因为我只在 Laravel 7 上测试过)是它返回整个请求对象本身。返回对象的示例“属性”:{}、“请求”:{}、“查询”:{}、“服务器”:{}、“文件”:{}、“cookies”:{}、“标题” : {}, "id": 1, "amount": 20, "comment": "deduction"
    【解决方案2】:

    改变这一行

    $report ->Applications($request->except('cl_e_start_date'));
    

    $report ->Applications($request);
    

    【讨论】:

    • 这将传递所有请求参数,但我只想发送其中一些参数
    • 也许你可以通过创建一个类来实现/扩展 Illuminate/http/Request 来过滤数据
    【解决方案3】:

    尝试如下(不确定它会起作用):

    public function getquickviews(Request $request){
        $returnedRequest = $request; // do whatever with your request here
        return redirect()->route('SecondController.Applications', compact('returnedRequest'));
    }
    
    
    
    public function Applications(Request $request){
        /*APP USAGE*/
    }
    

    【讨论】:

    • 这将发送所有请求参数,但我只想发送一些参数,例如我收到的 getquickviews 4 但我只想发送 3 到应用程序函数
    • $returnedRequest = $request; // do whatever with your request here 在这里你可以对你的第一个请求做任何事情。所以如果你只想要3个参数,在$returnedRequest中设置3个参数
    【解决方案4】:

    我认为这会起作用:

    $report ->Applications($request->toArray());
    

    【讨论】:

      【解决方案5】:

      将请求获取到下一个方法或任何下一级调用的两种方法。

      首先,您可以将 Request 类依赖注入到该方法中,例如:

      public function store(Request $request)
      {
          // Form Submits here
      }
      

      如果您想将 $request 传递给其他方法,例如在插入后显示数据,您可以这样做:

      public function showStore(Request $request)
      {
          dd($request->get());
      }
      

      那么你就可以从store方法中调用这个方法了

      $this->showStore($request);
      

      或者第二个是你可以使用 request 作为方法进入 showStore 或任何 n 级调用。像这样:

      public function showStore()
      {
          dd(request()->all());
      }
      
      $this->showStore(); // You do not require any injection.
      

      祝你好运!!!

      【讨论】:

        【解决方案6】:

        为了能够创建自定义请求并因此使用它来引用控制器中的 post 方法,您需要首先启动一个 Request 实例,正如上面@martin Carrasco 所述:

        下面的代码是马丁卡拉斯科的延续

        public function getquickviews(Request $request){
        $report = new ReportController();
        $content = new Request
        ([
             'firstParam' => $request->param1,
             'secondParam' => $request ->param2,
        ]);
        
         $report ->Applications($content);
        

        }

        尝试一下,希望它有效。

        【讨论】:

          【解决方案7】:

          您可以保留所需的特定键和值,并在将其传递给函数之前从$request 中删除其余部分。首先将 $request 转换为数组 by

          $request->toArray()
          

          然后删除不需要的键

          unset($request['key-here']);
          

          然后将其传递给函数

          $report ->Applications($request);
          

          【讨论】:

            猜你喜欢
            • 2019-05-31
            • 1970-01-01
            • 2014-02-04
            • 2021-12-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多