Laravel:确定使用哪个 Controller 的中间件

标签 laravel laravel-5

我正在构建一个网站,它通过 javascript 加载所有页面和内容,同时还操纵浏览器地址栏(给人一种正常的、可导航的网站的错觉,每个页面都有自己的 URL)。作为后备措施,并且为了搜索引擎的利益,页面还必须能够在各自的 URL 上正常加载。

为此,我需要让 Laravel 知道页面数据是通过 ajax 调用还是普通 HTTP 请求请求的。我想这就是我会使用中间件的情况。我希望能够使用两个不同的 Controller 处理页面;一种用于 ajax,一种用于 HTTP。

即:

if (Request::ajax()){
    forward request to ajax page controller
}else {
    forward request to standard page controller
}

这可以用中间件处理吗?我能找到的所有示例似乎都假设 Controller 已经是给定的。

最佳答案

我使用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 的 url 分开。

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'
    ]);

}

无论哪种方式,你的 Controller 都会住在这里。

App/Http/Controllers/Api/ItemsController.php
App/Http/Controllers/ItemsController.php

编辑

我阅读了 GONG 的评论,RouteServiceProvider 也适用于此,但您仍然有两个不同的 url。您必须管理另一个路由文件,但无论什么对您有用。

关于Laravel:确定使用哪个 Controller 的中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39276301/

相关文章:

php - Laravel,我需要多个数据库表来对不同模型进行投票吗

php - LARAVEL ELOQUENT - 我想将用户表中的列添加到关系表中

Laravel 验证 如果勾选复选框,则需要输入文本?

php - 最小年龄验证 laravel

mysql - 从 Laravel 迁移创建时表中列前面的空格

php - Laravel 验证属性 "nice names"

Laravel 4 - 将数据库结果放入 View 中

mysql - 最后插入的 id 与 Lumen/Laravel 的内部交易

php - Laravel 5 php artisan migrate --数据库参数不起作用

jquery - AJAX post 不发送数据到 laravel Controller