我想在 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/
。
希望你明白
路由方法(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
则其相应的方法将起作用。但是,如果请求类似于/ajax/get_xyz
,并且您的AjaxController
中没有名为get_xyz
的方法,则会抛出BadMethodCallException
。