传递给UAParser\Parser::parse()的参数1必须是字符串类型,在laravel stats tracker中给出的是null。

问题描述 投票:0回答:1

我安装了 本包 但当我运行 php artisan migrate我看到这个错误。

在Parser.php第35行:

传递给UAParser\Parser::parse()的Argument 1必须是string类型,给定null,在...

我的代码在 config/database.php:

'tracker' => [
            'driver'   => 'tracker',
            'host'     => env('DB_HOST', '127.0.0.1'),
            'database' => env('DB_DATABASE', 'forge'),
            'strict' => false,    // to avoid problems on some MySQL installs
],

问题出在哪里?

我想上面的代码一定有问题。

laravel laravel-5.8
1个回答
1
投票

我认为是包中的一个问题,需要修复才能工作。该错误发生在 composer dump-autoload 运行。

所以我编辑了 pragmarx\tracker\src\Support\UserAgentParser.php 并编辑 construct 方法。

这是我的代码。

public function __construct($basePath, $userAgent = null)
    {
        $userAgent = $_SERVER['HTTP_USER_AGENT'];
        if (!$userAgent && isset($_SERVER['HTTP_USER_AGENT'])) {
            $userAgent = $_SERVER['HTTP_USER_AGENT'];
        }

        $this->parser = Parser::create()->parse($userAgent);

        $this->userAgent = $this->parser->ua;

        $this->operatingSystem = $this->parser->os;

        $this->device = $this->parser->device;

        $this->basePath = $basePath;

        $this->originalUserAgent = $this->parser->originalUserAgent;
    }

然后,我运行 composer dump-autoload 我自己。

注。 当然,当你运行 composer updatecomposer install 重蹈覆辙


0
投票

包中有一个问题,需要修复才行。 一个快速的解决方法是,如果没有的话,可以通过php手动设置user_agent。

你可以在你的public\index.php中临时添加以下内容:

if (!isset($_SERVER['HTTP_USER_AGENT']))
    ini_set('user_agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');
© www.soinside.com 2019 - 2024. All rights reserved.