spinen/laravel-browser-filter

根据浏览器类型过滤 HTTP 请求。

3.2.0 2024-04-08 12:10 UTC

README

Latest Stable Version Latest Unstable Version Total Downloads License

这是一个用于基于浏览器类型过滤路由的 Laravel 5 中间件。

我们在项目开始时指定我们将要支持的浏览器,因此这个包确保访客正在使用支持的浏览器。

构建状态

先决条件

注意:如果您需要使用 PHP <7.2 或 Laravel <5.2,请继续使用版本 1.x

除了 Laravel >= 5.5 之外,还需要两个包

  • mobiledetect - 获取用户代理字符串。此包不是获取用户代理字符串所必需的,但我计划在将来使用其他功能,因此我保留了它。
  • ua-parser PHP 库 - 解析用户代理字符串

安装

安装 Browser Filter

$ composer require spinen/laravel-browser-filter

此包使用 Laravel 5 的 自动注册功能

'providers' => [
    // ...
    Spinen\BrowserFilter\FilterServiceProvider::class,
];

注册中间件

中间件需要与 Kernel 注册,以便它可以解析请求。

Laravel 11 及以上版本

bootstrap/app.php 中注册 web 组的 HTTP 栈中间件

    ->withMiddleware(function (Middleware $middleware) {
        // ...
        $middleware->web(append: [
            // ...
            \Spinen\BrowserFilter\Stack\Filter::class,
        ]);
        // ...
    })

bootstrap/app.php 中注册路由中间件

    ->withMiddleware(function (Middleware $middleware) {
        // ...
        $middleware->alias([
            // ...
            'browser.allow' => \Spinen\BrowserFilter\Route\AllowFilter::class,
            'browser.block' => \Spinen\BrowserFilter\Route\BlockFilter::class,
        ]);
        // ...
    })

Laravel 11 之前版本

app/Http/Kernel.php 中注册 web 组的 HTTP 栈中间件

    protected $middlewareGroups = [
        'web' => [
            // ..
            \Spinen\BrowserFilter\Stack\Filter::class,
        ],
        // ..

app/Http/Kernel.php 中注册路由中间件

    protected $routeMiddleware = [
        // ..
        'browser.allow' => \Spinen\BrowserFilter\Route\AllowFilter::class,
        'browser.block' => \Spinen\BrowserFilter\Route\BlockFilter::class,

显示被阻止时的页面

构建一个带有命名路由的页面,将阻止的浏览器重定向到该页面

    // This is only a simple example.  You would probably want to route to a controller with a view.
    Route::get('incompatible_browser', ['as' => 'incompatible_browser', 'uses' => function() {
        return "You are using a blocked browser.";
    }]);

配置中间件选项

将包配置文件发布到 config/browserfilter.php

$ php artisan vendor:publish --provider="Spinen\BrowserFilter\FilterServiceProvider"

此文件已完全文档化,请阅读它以了解如何配置中间件。您可以配置以下 4 个顶级项...

  1. type - 应用于堆过滤器的过滤策略类型
  2. rules - 允许或阻止所有 HTTP 请求的设备/浏览器/版本的数组
  3. route - 如果用户使用被阻止客户端,则重定向用户到的路由名称
  4. timeout - 缓存客户端数据的时间长度,其中 "0" 禁用缓存

使用路由中间件

路由中间件使用与堆中间件相同的配置文件,但忽略规则。

在您希望使用的路由过滤器后面的冒号(:)之后传递规则...

    Route::get('tablet_page', [
        'middleware' => 'browser.allow:Tablet',
        'uses'       => function () {
            return "Special page that is only accessible to tablets";
        }
    ]);

    Route::get('ie_is_blocked_page', [
        'middleware' => 'browser.block:Other/Ie',
        'uses'       => function () {
            return "Special page that is only accessible to non IE browsers on Desktops";
        }
    ]);

过滤器的格式为 Device/Browser/operatorVersion|operatorVersion2;Device/Browser2/operatorVersion,因此以下规则

    $rule = [
        'Mobile' => '*',
        'Other' => [
            'Ie' => [
                '<' => '10',
                '>' => '13',
            ],
        ],
        'Tablet' => '*',
    ]

将写成: Mobile;Other/Ie/<10|>13;Tablet