首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 6路变控制器方法

Laravel 6路变控制器方法
EN

Stack Overflow用户
提问于 2019-11-29 04:40:18
回答 2查看 542关注 0票数 0

我想用laravel为我所有的ajax请求制定一条路线。我目前拥有的是:

代码语言:javascript
复制
Route::post('/ajax/{method}', 'AjaxController@index')->name('ajax-request');

我可以这样做(使用动态方法名称):

代码语言:javascript
复制
Route::post('/ajax/{method}', 'AjaxController@{method}')->name('ajax-request');

例如,当我调用/ajax/get_comments时,它会调用AjaxController@get_comments方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-29 05:52:23

路由方法(getpost等)可以使用下面的模式ControllerName@methodName接受它们的第二个参数为string

您可以从请求路径检索{method}参数,并将其附加到路由方法的第二个参数中。呃,就像'ControllerName@'. 'methodName'

尝试以下

假设{method}将是请求路径中的第二个段。如果不更改segment()参数中的值。

尝试以下几点:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2019-11-29 04:56:07

您可以向您的路由添加闭包函数以实现此功能。

代码语言:javascript
复制
Route::get('ajax/{method}', function($method){

    $app = app();

    $controller = $app->make('App\Http\Controllers\AjaxController');

    return $controller->callAction($method, $parameters = array());

});

现在,调用get_comments方法如下:

代码语言:javascript
复制
localhost:8000/ajax/get_comments

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

我希望你能理解

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59098862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档