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

Php 如何在控制器Laravel中调用方法?,php,laravel,laravel-5,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_

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

我的控制器代码如下:

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()字符串。
非常感谢您的帮助。

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

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

由于要基于任意字符串动态调用方法:

$foo = call_user_func('section1');
还是你的情况

$foo = call_user_func($data['currentTab']');

您不应该在请求/响应周期之外调用控制器方法。时间表是为执行命令而制定的,比如inspire命令

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

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


当您的命令在使用PHP artisan
your_command_name
时生效后,您可以将其添加到计划中:
$schedule->command('your_command_name')->hourly()

是,但是$data['currentTab']返回一个字符串,我不仅有section1(),总共有7个;使调用_user _func更容易使用。
$data['currentTab']
包含要调用的方法的名称?是$data['currentTab']返回'section1'或'section2',等等。因此,如果它是section1,我想调用方法section1(),我以前有过类似的方法:
$rules=call\u user\u func($data['currentTab'])
但如果我的函数位于我的控制器中,则此操作无效。section方法调用的结果是否是您试图在多个控制器之间共享的结果?它们会在控制器之外使用吗?受保护的函数调度(调度$schedule){$schedule->call('Full\Namespace\YourController@method')->hourly();}