spinen / laravel-browser-filter
根据浏览器类型过滤 HTTP 请求。
3.2.0
2024-04-08 12:10 UTC
Requires
- php: >=8.1
- ext-json: *
- illuminate/cache: ^9.19|^10|^11
- illuminate/routing: ^9.19|^10|^11
- illuminate/support: ^9.42|^10|^11
- mobiledetect/mobiledetectlib: ~2.8
- ua-parser/uap-php: ~3.9
Requires (Dev)
- illuminate/http: ^9.19|^10
- laravel/pint: ^1.2
- mockery/mockery: ^1.5.1
- phpunit/phpunit: ^9.6.5
- psy/psysh: ^0.11
- symfony/var-dumper: ^6.2
- dev-develop
- 3.2.0
- 3.1.0
- 3.0.0
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.1
- 2.0.0
- 1.1.0
- 1.0.1
- 1.0.0
- 0.8.0
- 0.7.0
- 0.6.0
- 0.5.0
- 0.4.0
- 0.3.6
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.1
- 0.2.0
- 0.1.0
- dev-master
- dev-feature/supportL10
- dev-feature/supportLaravel9
- dev-thaisonle-patch-1
- dev-feature/supportLaravel6
- dev-feature/cleanupRepo
This package is auto-updated.
Last update: 2024-09-08 13:04:45 UTC
README
这是一个用于基于浏览器类型过滤路由的 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 个顶级项...
- type - 应用于堆过滤器的过滤策略类型
- rules - 允许或阻止所有 HTTP 请求的设备/浏览器/版本的数组
- route - 如果用户使用被阻止客户端,则重定向用户到的路由名称
- 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
。