我正在尝试使用作曲家 vimeo 包“vimeo/vimeo-api”:“dev-master”。
在作曲家自己的 ClassLoader.php 中,事情变得丑陋,在下面的函数中,它达到了:if (0 === strpos($class, $prefix))
并跳出循环,因为此时$class = 'Vimeo'
结果$prefix = 'Vimeo/'
为假。
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 自动加载,如下所示:
{
"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 如下:
<?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) 中运行的事实有关,还是作曲家搞砸了或其他什么?