Laravel为RESTful API提供无限参数

时间:2016-05-02 11:28:52

标签: php api rest laravel-5.1

我正在使用Laravel 5.1构建RESTful API。 默认路由为api。允许用户使用她想要的参数创建网址服务,让我们说.../api/p1/p2/.../pn

如何将单个路由指向单个Controller,以便在单个控制器中处理该服务?

注意:首先,应用程序只需要通过比较url与数据库中存储的服务来了解服务是否存在。至于服务本身,可以稍后查询到数据库。

我读到我们可以在Laravel 4中使用*,Laravel 5.1怎么样?

我试过了:

Route::resource('/api/*', 'APIServiceController');但它不适用于无限制参数

或者可以像这样做

Route::group(['prefix' => 'api'], function () { //what should I put in the closure, how can I redirect it to a single controller });

2 个答案:

答案 0 :(得分:3)

写下您的路线如下: -

Route::group(['prefix' => 'api'], function () {
    // this route will basically catch everything that starts with api/routeName 
    Route::get('routeName/{params?}', function($params= null){
        return $params;
    })->where('params', '(.*)');
});

重定向到控制器,

Route::group(['prefix' => 'api'], function () {
    Route::get('routeName/{params?}', 'YourController@action')->where('params', '(.*)');
});

如果你想使routeName成为动态,那么只需将它写在大括号中,如下所示: -

Route::get('{routeName}/{params?}', 'YourController@action')->where('params', '(.*)');

希望它会对你有所帮助: - )

答案 1 :(得分:2)

你可以尝试这个技巧

Route::get('{pageLink}/{otherParams?}', 'IndexController@get')->where('otherParams', '(.*)');

你应该将它放在routes.php文件的末尾,因为它就像一个“全部捕获”的文件。路由。

class IndexController extends BaseController {

    public function get($pageLink, $otherParams = null)
    {
        if($otherParams) 
        {
            $otherParams = explode('/', $otherParams);
        }
    }

}