我正在建立一个网站,它通过javascript加载所有页面和内容,同时还操纵浏览器地址栏(给出了一个正常的,可导航的网站的错觉,每个页面都有自己的URL)。作为后备,并且为了搜索引擎的利益,页面也必须能够正常加载到各自的URL。
为此,我需要让Laravel知道是否通过ajax调用或普通HTTP请求请求页面数据。这 - 我认为 - 这将是我将使用中间件的情况。我希望能够使用两个不同的控制器处理页面;一个用于ajax,一个用于HTTP。
即:
if (Request::ajax()){
forward request to ajax page controller
}else {
forward request to standard page controller
}
这可以用中间件来处理吗?我能找到的所有例子似乎都假设控制器已经是给定的。
答案 0 :(得分:1)
我使用routes.php
文件而不是中间件。我相信中间件是在路线确定之后。
if(Request::ajax() || Request::json()){
Route::get('items', [
'as' => 'api.posts.index' ,
'uses' => 'Api\ItemsController@index'
]);
} else {
Route::get('items', [
'as' => 'posts.index' ,
'uses' => 'ItemsController@index'
]);
}
我是这样做的,因为我喜欢将json和web的网址分开。
Route::get('items', [
'as' => 'posts.index' ,
'uses' => 'ItemsController@index'
]);
/**
* JSON API
*
*/
Route::group([
'prefix' => 'api/v1',
'as' => 'api.',
'namespace' => 'Api'
], function () {
Route::get('items', [
'as' => 'posts.index' ,
'uses' => 'ItemsController@index'
]);
}
无论哪种方式,你的控制器都会住在这里。
App/Http/Controllers/Api/ItemsController.php
App/Http/Controllers/ItemsController.php
我阅读了GONG的评论表格,而RouteServiceProvider也适用于此,但您仍然会有两个不同的网址。你必须管理另一个路由文件,但任何适合你的。