【问题标题】:Laravel routes with multiple optional parameters具有多个可选参数的 Laravel 路由
【发布时间】:2014-05-04 04:36:44
【问题描述】:

我正在使用 Laravel 构建一个 RESTful api。我对如何进行路由感到困惑。

我有以下 api 控制器

class APIController extends BaseController{

    public function sendMsg($authid, $roomid, $msg){

    }

    public function getMsg($roomid, $timestamp){

    }
}

我希望它可以访问的 URL 格式如下所示: http://example.com/api/{functionName}/{parameter1}/{parameter2}/.../

在这里,在第一个参数中,我将拥有应该映射到控制器类中的函数的函数名称,然后是控制器所需的参数。

例如
要访问sendMsg()函数,url应该是这样的:
http://example.com/api/sendMsg/sdf879s8/2/hi+there+whats+up

要访问getMsg() 函数,网址应如下所示 http://example.com/api/getMsg/2/1395796678


那么......我怎样才能编写我的路线,以便它可以处理动态数量和不同的参数需要?

我可以像这样为每个函数名写一个路由:

Route::get('/api/sendmsg/{authid}/{msg}', function($authid, $msg){
    //call function...
});

其他功能也一样。如果没问题,但是有没有办法将所有功能与 APIController 合并到一个路由中?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    是的,您可以使用最适合构建API 的resourceful controller 将所有功能组合到您的APIController 中:

    Route::resource('api' ,'APIController');
    

    但是,从技术上讲,它根本不是一个路由,而是Laravel 为每个函数生成多个routes,要检查路由,您可以从命令提示符/终端运行php artisan routes 命令。

    要创建一个resourceful controller,您可以从命令行运行以下命令:

    php artisan controller:make APIController
    

    这将创建一个具有 6 个函数(仅限骨架/结构)的控制器,并且每个函数都将映射到一个 HTTP 动词。这意味着,将根据请求类型(GET/POST 等)调用该函数。例如,如果使用http://domain.com/api 使用GET 请求发出请求,则将调用getIndex 方法。

    public function getIndex()
    { 
        // ...
    }
    

    您应该查看文档以获得正确的深入理解。这称为RESTful api。

    【讨论】:

    • 您的回答很有趣,但没有回答我的问题,我的问题是如何将一组未定义的参数映射到函数。就像 function1 需要 3 个参数和 function2 需要 5 个参数一样。我该怎么做?
    • 你可以使用api/{param1?}/{param2?},这些都是可选的,你的函数必须为每个参数使用一个默认值,比如function f($p1 = null, $p2 = null)是你要求的吗?
    • 嗯,这可以工作,但如果我有 4 个函数,每个函数都有 4 个唯一参数,那将是 16 个参数!也许我之前不够清楚,是否有一个函数可以获取关联数组中的所有参数或类似的东西?
    • 可以使用Route::current()->parameters()获取数组中的所有参数。
    • 是的,这正是我要找的!现在最后一件事。如果我有一个像 http://domain.com/api/getMsg/param1/param2/param3/ 这样的 url,我如何创建一个响应任何 url 的路由,以 getMsg 作为第一个参数
    猜你喜欢
    • 2018-08-24
    • 2016-10-12
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2016-02-15
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多