如何使用PSR-4自动加载课程?

时间:2016-07-27 09:25:55

标签: php composer-php autoloader psr-4

我正在尝试使用 device-detector 在我的php脚本中设置设备检测系统。我正在按照其文档进行设置,但在执行此操作时会出错。我已经使用composer下载了所需的文件。我甚至克隆了repo以下载所需的文件并将其保存在供应商的单独文件夹中。

在文档中,它要求将piwik / device-detector添加到您的项目要求,但我在运行它时遇到了错误。

  

注意:未定义的变量:第11行的C:\ wamp \ www \ trackme \ track.php中的userAgent

注意:我对自动加载相对较新。

COMPOSER.JSON

{
    "name": "piwik/device-detector",
    "type": "library",
    "description": "The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, media players, mobile apps, feed readers, libraries, etc), operating systems, devices, brands and models.",
    "keywords": ["useragent","parser","devicedetection"],
    "homepage": "http://piwik.org",
    "license": "LGPL-3.0+",
    "authors": [
        {
            "name": "The Piwik Team",
            "email": "hello@piwik.org",
            "homepage": "http://piwik.org/the-piwik-team/"
        }
    ],
    "support": {
        "forum": "http://forum.piwik.org/",
        "issues": "https://github.com/piwik/device-detector/issues",
        "wiki": "http://dev.piwik.org/",
        "source": "https://github.com/piwik/piwik"
    },
    "autoload": {
        "psr-4": { "DeviceDetector\\": "piwik/device-detector" }
    },
    "require": {
        "php": ">=5.3.2",
        "mustangostang/spyc": "*"
    },
    "require-dev": {
        "phpunit/phpunit": "4.1.*",
        "fabpot/php-cs-fixer": "~1.7"
    },
    "suggest": {
        "doctrine/cache": "Can directly be used for caching purpose"
    }
}

track.php [已更新]

<?php

//date_default_timezone_set('Asia/Kolkata');

require_once 'vendor/autoload.php';

use DeviceDetector\DeviceDetector;
use DeviceDetector\Parser\Device\DeviceParserAbstract;

DeviceParserAbstract::setVersionTruncation(DeviceParserAbstract::VERSION_TRUNCATION_NONE);

$dd = new DeviceDetector($userAgent);

$dd->discardBotInformation();

$dd->skipBotDetection();

$dd->parse();

if ($dd->isBot()) {
  // handle bots,spiders,crawlers,...
  $botInfo = $dd->getBot();
} else {
  $clientInfo = $dd->getClient(); // holds information about browser, feed reader, media player, ...
  $osInfo = $dd->getOs();
  $device = $dd->getDevice();
  $brand = $dd->getBrand();
  $model = $dd->getModel();
}

echo $osInfo;
}

1 个答案:

答案 0 :(得分:0)

设置正确,您的班级文件位置正确。你可以看到你的代码被处理到第14行 - 这意味着找到了第10行和第12行的类。

缺少的是doctrine/cache包尚未安装。您确实将其放入“建议”部分,该部分未安装,因此对Composer自动加载器未知。请参阅文档中的详细信息:https://getcomposer.org/doc/04-schema.md#suggest

您需要将其移至“require”部分,就是这样。

我建议在使用之前定义$userAgent:)

通过评论更新1:

为了仅使用 piwik,请将其移至“require”部分。首先,完全删除“自动加载”部分。就是这部分:

"autoload": {
    "psr-4": { "DeviceDetector\\": "piwik/device-detector" }
},

然后致电

composer require piwik/device-detector

这会将其添加到“require”部分。