Laravel 路由问题
Laravel routing woes
我的路由很好用:
Route::get('/', 'MainController@index');
Route::get('about', 'MainController@about');
Route::get('contact', 'MainController@contact');
Route::get('signUp', 'MainController@signUp');
MainController.php
中的正确函数按预期被调用。
我遇到问题的地方在于让以下内容起作用:
我有一个名为 APIController.php
的新文件。 http://eamorr.com/api/getUsers 的所有请求都应由 APIController.php
.
中的 getUsers()
处理
我试过这个:
Route::get('api', 'APIController@index'); //this works fine...
Route::any('api/{$function}', function($function){ //but this won't work!
return redirect()->route('api/'.$function);
});
我不想像这样列出每个函数:
Route::get('api/addUser', 'APIController@addUser');
Route::get('api/getUser', 'APIController@getUser');
Route::get('api/getAllUsers', 'APIController@getAllUsers');
...
我希望 /api/*
请求直接指向 APIController...
如果有人有任何提示,那就太好了...
我昨天才开始学习Laravel,所以请放轻松!
您有 Route::controller
方法,它将您的 class 绑定为隐式控制器:
Route::controller('api', 'APIContoller');
这将声明新的 Implict Controller,它将自动将您的所有调用映射到以请求类型为前缀的控制器方法。
因此,如果您对 /api/users
执行 GET 请求,这将触发 APIController 的 getUsers
方法。如果你向 /api/users
发出 POST 请求,它将触发 postUsers
方法等
您可以在 documentation 中阅读有关隐式控制器的更多信息。
您可以这样调用控制器操作:
Route::any('/api/{action}', function($action)
{
// this will call the method from the controller class and return it's response
return app()->make('App\Http\Controllers\ApiController')->callAction($action, []);
});
但是我建议您按照@shaddy 在他的回答中建议的那样查看 Implicit Controllers,因为 addUser
之类的操作需要将 HTTP 动词限制为 POST
,您可以'用这种方法做不好。
此外,由于从您的路由路径看来您正在构建一个 API,您可能需要考虑使用 RESTful Resource Controllers.
我的路由很好用:
Route::get('/', 'MainController@index');
Route::get('about', 'MainController@about');
Route::get('contact', 'MainController@contact');
Route::get('signUp', 'MainController@signUp');
MainController.php
中的正确函数按预期被调用。
我遇到问题的地方在于让以下内容起作用:
我有一个名为 APIController.php
的新文件。 http://eamorr.com/api/getUsers 的所有请求都应由 APIController.php
.
getUsers()
处理
我试过这个:
Route::get('api', 'APIController@index'); //this works fine...
Route::any('api/{$function}', function($function){ //but this won't work!
return redirect()->route('api/'.$function);
});
我不想像这样列出每个函数:
Route::get('api/addUser', 'APIController@addUser');
Route::get('api/getUser', 'APIController@getUser');
Route::get('api/getAllUsers', 'APIController@getAllUsers');
...
我希望 /api/*
请求直接指向 APIController...
如果有人有任何提示,那就太好了...
我昨天才开始学习Laravel,所以请放轻松!
您有 Route::controller
方法,它将您的 class 绑定为隐式控制器:
Route::controller('api', 'APIContoller');
这将声明新的 Implict Controller,它将自动将您的所有调用映射到以请求类型为前缀的控制器方法。
因此,如果您对 /api/users
执行 GET 请求,这将触发 APIController 的 getUsers
方法。如果你向 /api/users
发出 POST 请求,它将触发 postUsers
方法等
您可以在 documentation 中阅读有关隐式控制器的更多信息。
您可以这样调用控制器操作:
Route::any('/api/{action}', function($action)
{
// this will call the method from the controller class and return it's response
return app()->make('App\Http\Controllers\ApiController')->callAction($action, []);
});
但是我建议您按照@shaddy 在他的回答中建议的那样查看 Implicit Controllers,因为 addUser
之类的操作需要将 HTTP 动词限制为 POST
,您可以'用这种方法做不好。
此外,由于从您的路由路径看来您正在构建一个 API,您可能需要考虑使用 RESTful Resource Controllers.