Laravel 6 路由变量控制器方法

我想为我在 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方法吗?


慕娘9325324
浏览 107回答 2
2回答

互换的青春

你可以在你的路由中添加闭包函数来实现这一点。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/目录中。

jeck猫

Route 方法(get等)可以使用以下模式post接受它们的第二个参数作为字符串ControllerName@methodName。{method}您可以从请求路径中检索参数并将其附加到 Route 方法的第二个参数。即,像'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则它们的相应方法将起作用。但是,如果 request 类似于/ajax/get_xyz并且您没有get_xyz在您的方法中命名的方法,AjaxController那么BadMethodCallException将抛出 a 。
打开App,查看更多内容
随时随地看视频慕课网APP