区分来自网络路线和API路线的呼叫?
问题描述:
在我web.php
文件,我有一个看起来像这样的路线:区分来自网络路线和API路线的呼叫?
Route::get('/', '[email protected]');
而且在我api.php
文件,我有一个看起来像这样的路线:
Route::get('feeds', '[email protected]');
注意到他们两个呼叫同样的方法,getFeed()
。
有没有一种方法来区分来自web路由的调用是否来自控制器方法中的API路由?我需要能够返回两个不同的响应,一个用于web路由,另一个用于API路由。
这里是HomeController.php
类:
class HomeController extends Controller
{
public function getFeed() {
$user = Auth::user();
// How to check if call is from web route or API route?
// Need to return two different responses for each scenario.
}
}
感谢。
答
您可以使用
$currentRoute = Illuminate\Routing\Router::getCurrentRoute(); // Returns a Route
$currentRoute->uri(); // returns the uri of the cureent route
https://laravel.com/api/5.4/Illuminate/Routing/Router.html#method_getCurrentRoute
https://laravel.com/api/5.4/Illuminate/Routing/Route.html
希望这有助于。 :)
答
替换此行
Route :: get('feeds','HomeController @ getFeed'); 与 Route :: get('api/feeds','HomeController @ getFeed');
表示在所有api路由中添加api前缀。
它将帮助您确定哪些路由来自api,哪些不是。
检查您可以使用下面的代码
if (Request::is('api*')) {
echo "request from api route";
exit();
}else{
echo "request from web";
exit();
}
答
在你的鞋,我会在3个控制器来处理请求和类似尼拉吉提出的,独立的航线与/ API/
前缀的API路线class HomeController extends Controller
{
public function getFeed(entrypoint) {
$user = Auth::user();
// do the common magic here ...
}
}
class WebHomeController extends HomeController
{
public function getFeed() {
feed = this.getFeed();
// do the crazy web magic here ...
}
}
class APIHomeController extends HomeController
{
public function getFeed() {
feed = this.getFeed();
// do the crazy api magic here ...
}
}
Route::get('feeds', '[email protected]');
Route::get('api/feeds', '[email protected]');
您可以使用'$ request-> url();'获取请求URL并根据请求URL在同一个函数中可以有不同的处理... –