拉拉维尔 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方法?

您可以在路由中添加闭包函数来实现此功能。

Route::get('ajax/{method}', function($method){
$app = app();
$controller = $app->make('AppHttpControllersAjaxController');
return $controller->callAction($method, $parameters = array());
});

现在,调用get_comments方法,如下所示:

localhost:8000/ajax/get_comments

注意:确保您的控制器位于目录中app/Http/Controller/

希望你明白

路由方法(getpost等(可以使用以下模式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则其相应的方法将起作用。但是,如果请求类似于/ajax/get_xyz,并且您的AjaxController中没有名为get_xyz的方法,则会抛出BadMethodCallException

最新更新