【问题标题】:laravel, How to route from controller to another resource controller using request objectlaravel,如何使用请求对象从控制器路由到另一个资源控制器
【发布时间】:2017-08-07 16:53:18
【问题描述】:

我有两个控制器(工作流和阶段),我需要使用我创建的请求对象从 Workflow.store 函数路由到 Stage.store 函数:

工作流控制器:

public function store(WorkflowRequest $request)
{
    $oWorkflow = new WfWorkflow();
    $oWorkflow->name = $request->get('workflow_name');
    if($oWorkflow->save()){
        $aStages = $request->get('wf_stage');
        $params = [
            '_token' => $request->get('_token'),
            'wf_id' => $oWorkflow->id,
            'stages' => $aStages
        ];
        $oStageRequestObject = Request::create(url('stage'), 'POST', $params);
    }
}

现在,我如何使用 Request 对象 $oStageRequestObject 使用 POST 方法路由到 stage.store

  • stage.store 我需要使用表单请求验证。

【问题讨论】:

    标签: php laravel-5.4


    【解决方案1】:
    $params = [
            '_token' => $request->get('_token'),
            'wf_id' => $oWorkflow->id,
            'stages' => $aStages
        ];
    

    您希望使用 POST 方法发送此 $params 变量以路由到 stage.store。

    为此,您可以设置会话。

    例如。

    在 Workflow.store 方法中设置会话是这样的。

    Session(['param' => $params]);
    

    现在您可以使用 POST 方法在 stage.store 方法中访问此会话。

    【讨论】:

      【解决方案2】:

      如果您想重用stage.store 逻辑,那么我建议创建处理此逻辑的StageService 服务类。所以StageController 看起来像这样:

      public function store(Requests\StoreStageRequest $request, StageService $stageService)
      {
          $stageService->handleRequest($request); // put controller logic to this function
      
          return redirect('/somewere');
      }
      

      然后在WorkflowController 中你可以手动创建StoreStageRequest 请求并将其传递给handleRequest()

      public function store(WorkflowRequest $request, StageService $stageService)
      {
          // ...
      
          $params = [
              '_token' => $request->get('_token'),
              'wf_id' => $oWorkflow->id,
              'stages' => $aStages
          ];
      
          $oStageRequest = new Requests\StoreStageRequest($params);
      
          $stageService->handleRequest($oStageRequest);
      
          // ...
      }
      

      至于验证,认为唯一的方法是手动创建验证器,并将数据和规则传递给它。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-04
        • 2014-10-08
        • 2021-12-28
        • 2014-08-07
        • 1970-01-01
        • 2013-08-20
        • 2014-07-08
        • 2018-01-16
        相关资源
        最近更新 更多