我想用laravel为我所有的ajax请求制定一条路线。我目前拥有的是:
Route::post('/ajax/{method}', 'AjaxController@index')->name('ajax-request');我可以这样做(使用动态方法名称):
Route::post('/ajax/{method}', 'AjaxController@{method}')->name('ajax-request');例如,当我调用/ajax/get_comments时,它会调用AjaxController@get_comments方法吗?
发布于 2019-11-29 05:52:23
路由方法(get、post等)可以使用下面的模式ControllerName@methodName接受它们的第二个参数为string。
您可以从请求路径检索{method}参数,并将其附加到路由方法的第二个参数中。呃,就像'ControllerName@'. 'methodName'
尝试以下:
假设{method}将是请求路径中的第二个段。如果不更改segment()参数中的值。
尝试以下几点:
Route::post('/ajax/{method}', 'AjaxController@'.(Request::segment('2')))->name('ajax-request');请注意:
如果选择将URL参数作为方法名使用,则如果用户能够更改指定路径以外的请求路径,则会引发运行时异常。
考虑以下情况:
您的AjaxController只有get_comments()和get_deleted_comments()方法。
如果请求是/ajax/get_comments或/ajax/get_deleted_comments,那么它们的相应方法就可以工作了。但是,如果请求类似于/ajax/get_xyz,并且在AjaxController中没有一个名为get_xyz的方法,那么就会抛出一个BadMethodCallException。
发布于 2019-11-29 04:56:07
您可以向您的路由添加闭包函数以实现此功能。
Route::get('ajax/{method}', function($method){
$app = app();
$controller = $app->make('App\Http\Controllers\AjaxController');
return $controller->callAction($method, $parameters = array());
});现在,调用get_comments方法如下:
localhost:8000/ajax/get_comments注意:确保您的控制器在app/Http/Controller/目录中。
我希望你能理解
https://stackoverflow.com/questions/59098862
复制相似问题