桌面和移动端 User Agent 解析器
Jenssegers-agent 包是一个支持 Laravel 的桌面端/移动端 User Agent 解析器,基于 MobileDetect。你可以在任何 PHP 应用中使用这些包,并且它也提供了 Laravel 服务提供者,提供了服务 Facade:
use Jenssegers\Agent\Facades\Agent;
Agent::is('Firefox');
Agent::is('iPhone');
// Magic methods
Agent::isFirefox();
Agent::isIPhone();
// Device type
Agent::isDesktop();
Agent::isMobile();
Agent::isTablet();
Agent::isPhone();
除了 user agent 辅助函数,Agent 服务也提供了语言辅助函数,设备名方法,平台等等。比如,你可以使用如下方法获取浏览器语言:
Agent::languages(); // ['en-us', 'en']
使用这个语言方法,你可以在中间件的请求期间设置本地语言 locale。示例如下:
public function handle(Request $request, Closure $next): Response
{
$supported_locales = ['en', 'es'];
$user_locales = Agent::languages();
foreach ($user_locales as $locale) {
if (in_array($locale, $supported_locales)) {
app()->setLocale($locale);
}
}
return $next($request);
}
如果不支持该语言,将使用 config('app.fallback_locale')
设置的语言。你也可以在中间件中使用 languages()
方法,根据 user agent 来重定向语言指定的路由 /{locale}/
。
Route::prefix('/{locale}')->group(function () {
// ...
})->whereIn('locale', ['en', 'es']);
Agent 服务也可以判断当前 user agent 是否为机器人(bot)以及是那种机器人:
// Is the user a bot?
Agent::isRobot(); // bool
// get the robot name
Agent::robot();
最后,要获取设备名、平台及浏览器,你可以在 Facades 上使用适当的命名方法:
Agent::device(); // "Macintosh"
Agent::platform(); // "OS X"
Agent::browser(); // "Safari"