首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Composer没有加载PSR-4自动加载?

为什么Composer没有加载PSR-4自动加载?
EN

Stack Overflow用户
提问于 2014-09-08 15:59:38
回答 1查看 1.6K关注 0票数 0

我正在尝试使用composer vimeo包"vimeo/vimeo-api":"dev-master“。

在作曲家自己的ClassLoader.php中,事情变得很糟糕,在下面的函数中,它到达:if (0 === strpos($class, $prefix))并打破循环,因为在这一点上,$class = 'Vimeo'$prefix = 'Vimeo/',所以结果是假的。

代码语言:javascript
复制
private function findFileWithExtension($class, $ext)
{
    // PSR-4 lookup
    $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;

    $first = $class[0];
    if (isset($this->prefixLengthsPsr4[$first])) {
        foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
            if (0 === strpos($class, $prefix)) {
                foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
                    if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
                        return $file;
                    }
                }
            }
        }
    }
    ...

vimeo包中的composer.json文件声明了一个'Vimeo\‘的psr-4自动加载,如下所示:

代码语言:javascript
复制
{
    "name": "vimeo/vimeo-api",
    "description": "Official PHP library for the Vimeo API.",
    "homepage": "https://github.com/vimeo/vimeo.php",
    "keywords": ["vimeo", "video"],
    "license": "Apache-2.0",
    "authors": [
        {
            "name": "Vimeo",
            "homepage": "http://vimeo.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.3.0"
    },
    "autoload": {
        "psr-4": {
            "Vimeo\\": "src/Vimeo"
        }
    }
}

作曲家创建的autoload_psr4.php如下:

代码语言:javascript
复制
<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Vimeo\\' => array($vendorDir . '/vimeo/vimeo-api/src/Vimeo')
);

因此,当我实例化类'new Vimeo('arg','arg');‘时,我得到一个类未找到错误。

这会不会与我在Zendframework (1.12.8)中运行的事实有关,或者是composer搞砸了之类的?

EN

回答 1

Stack Overflow用户

发布于 2014-09-08 20:15:32

正确的。一位同事找到了解决方案:我们需要在实例化composer托管的类时为composer使用的名称空间添加前缀。所以new Vimeo\Vimeo($foo, $bar)可以工作,或者在创建实例new Vimeo($foo, $bar)之前先放入use Vimeo\Video

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25719714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档