2 回答
TA贡献1797条经验 获得超6个赞
你可以在你的路由中添加闭包函数来实现这一点。
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/目录中。
TA贡献1909条经验 获得超7个赞
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 。
- 2 回答
- 0 关注
- 102 浏览
添加回答
举报