我有一个简单的方法,在我的控制器中定义。我需要能够从我的控制器中调用它
我的控制器代码如下:
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()的字符串 非常感谢任何帮助。
答案 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();
。