我有一个带有控制器的 RESTful API,当它被我的 android 应用程序点击时,它应该返回一个 JSON 响应,当它被 web 浏览器点击时,它应该返回一个“视图”。我什至不确定我是否以正确的方式接近这一点。我正在使用 Laravel,这就是我的控制器的样子
class TablesController extends BaseController { public function index() { $tables = Table::all(); return Response::json($tables); } }
我需要这样的东西
class TablesController extends BaseController { public function index() { $tables = Table::all(); if(beingCalledFromWebBrowser){ return View::make('table.index')->with('tables', $tables); }else{ //Android return Response::json($tables); } }
看看响应之间有何不同?
注意::这是给未来的观众的
我发现使用apiapi 调用前缀很方便的方法。在路由文件中使用
api
Route::group('prefix'=>'api',function(){ //handle requests by assigning controller methods here for example Route::get('posts', 'Api\Post\PostController@index'); }
在上述方法中,我将 api 调用和 Web 用户的控制器分开。但是如果你想使用同一个控制器那么Laravel Request有一个方便的方法。您可以在控制器中识别前缀。
Laravel Request
public function index(Request $request) { if( $request->is('api/*')){ //write your logic for api call $user = $this->getApiUser(); }else{ //write your logic for web call $user = $this->getWebUser(); } }
该is方法允许您验证传入请求 URI 是否与给定模式匹配。使用此方法时,您可以使用该\*字符作为通配符。
is
\*