2017-04-13 48 views
0

在我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. 
    } 
} 

感谢。

+0

您可以使用'$ request-> url();'获取请求URL并根据请求URL在同一个函数中可以有不同的处理... –

回答

0

替换此行
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(); 
} 
0

在你的鞋,我会在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]');