为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 6 路由变量控制器方法

Laravel 6 路由变量控制器方法

PHP
慕娘9325324 2022-05-27 16:33:11
我想为我在 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方法吗?
查看完整描述

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/目录中。


查看完整回答
反对 回复 2022-05-27
?
jeck猫

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 。


查看完整回答
反对 回复 2022-05-27
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信