在我的web.php
文件中,我的路线如下:
Route::get('/', 'HomeController@getFeed');
在我的api.php
文件中,我的路径如下:
Route::get('feeds', 'HomeController@getFeed');
请注意,它们都调用相同的方法getFeed()
。
有没有办法区分呼叫来自网络路由与控制器方法中的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 :(得分:2)
来自api.php的所有路由都自动以' api /'为前缀。 所以你可以使用他下面的代码来检查
if (Request::is('api*')) {
echo "request from api route";
exit();
}else{
echo "request from web";
exit();
}
答案 1 :(得分:1)
更换此行
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();
}
答案 2 :(得分:1)
我使用\Request::is('api/*')
if(\Request::is('api/*'))
return 'API';
else
return 'Non-API';
或者,您也可以使用路线名称进行检查;
if(\Request::route()->getName() == 'APIFeed')
return 'API';
else
return 'Non-API';
确保设置路线名称;
在web.php
Route::get('feeds', 'HomeController@getFeed')->name('WebFeed');
在api.php
Route::get('feeds', 'HomeController@getFeed')->name('APIFeed');
答案 3 :(得分:0)
您可以使用
$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
希望这会有所帮助。 :)
答案 4 :(得分:0)
在你的鞋子里,我会创建3个控制器来处理请求,就像Niraj提出的那样,通过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', 'WebHomeController@getFeed');
Route::get('api/feeds', 'APIHomeController@getFeed');
答案 5 :(得分:0)
这是从子控制器访问父方法的方式
class WebHomeController extends HomeController
{
//get parent methods and protected variables
public function __construct()
{
parent::__construct();
}
public function getFeed() {
//access parent method
$p = $this->getFeed();
feed = this.getFeed();
// do the crazy web magic here ...
}
}