如何在我的控制器Laravel中调用方法?

时间:2017-06-16 16:22:16

标签: php laravel laravel-5

我有一个简单的方法,在我的控制器中定义。我需要能够从我的控制器中调用它

我的控制器代码如下:

public function store(Request $request) {
    $data = $request->except('_token');

$name = "form1_sections/" . $data['nextTab'] . "_form";
parse_str($data['inputs'], $output);
$rules =  $this->call_user_func($data['currentTab']); //need to call section1() 
//here if $data['currentTab'] is section1
$validator = Validator::make($output, $rules);

if ($validator->passes()) {
    return ["view" => view("$name")->render(), "isValid" => true];
} else {
    return ["isValid" => false, "msg" => json_encode([
            'errors' => $validator->errors()->getMessages(),
            'code' => 422
        ])
    ];
}
}

function section1() {
    return [
        'startDate' => 'required| date',
        'endDate' => 'required| date|different:startDate',
        'cv' => 'mimes:pdf,doc,docx'
    ];
}
//alo have section2(), section3() etc.

$ data [' currentTab']返回section1()的字符串 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

就像在任何实例化的类中一样:

:org.jboss.weld.exceptions.DeploymentException:WELD-001409: Ambiguous dependencies for type CaseDTO with qualifiers @CaseContext
  at injection point [BackedAnnotatedField] @Inject @CaseContext private ca.bluecross.ab.muw.view.controller.UploadAssociatedDocumentController.muwCase
  at ca.bluecross.ab.muw.view.controller.UploadAssociatedDocumentController.muwCase(UploadAssociatedDocumentController.java:0)
  Possible dependencies: 
  - Producer Method [GroupCaseDTO] with qualifiers [@CaseContext @Any] declared as [[BackedAnnotatedMethod] @Produces @CaseContext public ca.bluecross.ab.muw.view.util.DataContextHelper.getContextGroupCase()],
  - Producer Method [IPCaseDTO] with qualifiers [@CaseContext @Any] declared as [[BackedAnnotatedMethod] @Produces @CaseContext public ca.bluecross.ab.muw.view.util.DataContextHelper.getContextIpCase()]

现在$foo = $this->section1(); 包含您返回的数组。您也应该将该方法表示为$foo

由于您希望基于任意字符串动态调用方法:

protected

或在你的情况下

$foo = call_user_func('section1');

答案 1 :(得分:0)

您不应在请求/响应周期之外调用控制器方法。并且计划用于执行命令,例如inspire命令。

如果您有一个执行逻辑的控制器方法,请将此逻辑放在另一个类中。然后在您需要的控制器操作中注入这个新类并使用它。

然后为要执行的任务创建命令。在命令中注入相同的类并使用它执行逻辑。

使用PHP工匠your_command_name后,如果您的命令有效,您可以将其添加到日程表中:$schedule->command('your_command_name')->hourly();