laravel,如何使用请求对象从控制器路由到另一个资源控制器

时间:2017-08-07 08:00:02

标签: php laravel-5.4

我有两个控制器(工作流和舞台),我需要使用我创建的请求对象从Stage.store函数路由到Workflow.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我需要使用表单请求验证。

2 个答案:

答案 0 :(得分:2)

$params = [
        '_token' => $request->get('_token'),
        'wf_id' => $oWorkflow->id,
        'stages' => $aStages
    ];

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

为此您可以设置会话。

对于前。

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

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

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

答案 1 :(得分:1)

如果要重用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);

    // ...
}

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

希望这有帮助。