Class 未找到,composer 和 Zend Framework 1 自动加载器问题
Class not found, composer and Zend Framework 1 autoloader issue
我在 [root]/composer.json
文件中有以下 class 自动加载定义:
{
...
"autoload": {
"psr-0": {
"": [
"application/models",
"application/controllers",
"application/forms",
"library/"
]
},
"psr-4": {
"": ["src/"]
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
...
}
当我调用 [root]/public_html/index.php
页面时,出现以下错误:
PHP Fatal error: Uncaught Error: Class 'classes\DependencyInjection' not found in /var/www/html/application/bootstrap.php:29
[root]/public_html/index.php
中的代码如下:
$bootstrap = true;
require_once '../application/bootstrap.php';
[root]/application/bootstrap.php
文件中的内容是:
// turn on autoloading for classes
// composer autoloader
include(MMIPATH.'/vendor/autoload.php');
// zend autoload
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
$diContainer = new classes\DependencyInjection(services.yaml');
$proxy = $diContainer->get('containerProxy');
这是[root]/library/classes/DependencyInjection.php
的定义:
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
USE Symfony\Component\DependencyInjection\Container;
class DependencyInjection extends ContainerBuilder
{
....
}
这是怎么回事?为什么自动加载器找不到 class?
您正在尝试加载 "classes" 命名空间,但是您的 class 未定义为位于 "classes" 命名空间中。
PSR-0 中的 new classes\DependencyInjection(...)
加载 {paths}\classes\DependencyInjection.php
并尝试从命名空间 classes
实例化 class DependencyInjection
,但是 DependencyInjection
不在 classes
命名空间中。文件将加载,但 class 不存在。
您可以将 namespace classes;
添加到每个 class 中,但这并不是一个很好的解决方案。更好的解决方案是使用适当的命名空间或更改 PSR-0 列表以包含 library/classes 并使用 new DependencyInjection(...)
。 (我投票给第一个——使用适当的命名空间。)
应要求。示例:
文件位置
{app}\library\UsefullNamespace\DependencyInjection.php
调用它使用
new UsefullNamespace\DependencyInjection.php
DependencyInjection.php:
namespace UsefullNamespace;
use [...];
class DependencyInjection extends ContainerBuilder
{
我在 [root]/composer.json
文件中有以下 class 自动加载定义:
{
...
"autoload": {
"psr-0": {
"": [
"application/models",
"application/controllers",
"application/forms",
"library/"
]
},
"psr-4": {
"": ["src/"]
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
...
}
当我调用 [root]/public_html/index.php
页面时,出现以下错误:
PHP Fatal error: Uncaught Error: Class 'classes\DependencyInjection' not found in /var/www/html/application/bootstrap.php:29
[root]/public_html/index.php
中的代码如下:
$bootstrap = true;
require_once '../application/bootstrap.php';
[root]/application/bootstrap.php
文件中的内容是:
// turn on autoloading for classes
// composer autoloader
include(MMIPATH.'/vendor/autoload.php');
// zend autoload
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
$diContainer = new classes\DependencyInjection(services.yaml');
$proxy = $diContainer->get('containerProxy');
这是[root]/library/classes/DependencyInjection.php
的定义:
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
USE Symfony\Component\DependencyInjection\Container;
class DependencyInjection extends ContainerBuilder
{
....
}
这是怎么回事?为什么自动加载器找不到 class?
您正在尝试加载 "classes" 命名空间,但是您的 class 未定义为位于 "classes" 命名空间中。
PSR-0 中的new classes\DependencyInjection(...)
加载 {paths}\classes\DependencyInjection.php
并尝试从命名空间 classes
实例化 class DependencyInjection
,但是 DependencyInjection
不在 classes
命名空间中。文件将加载,但 class 不存在。
您可以将 namespace classes;
添加到每个 class 中,但这并不是一个很好的解决方案。更好的解决方案是使用适当的命名空间或更改 PSR-0 列表以包含 library/classes 并使用 new DependencyInjection(...)
。 (我投票给第一个——使用适当的命名空间。)
应要求。示例:
文件位置
{app}\library\UsefullNamespace\DependencyInjection.php
调用它使用
new UsefullNamespace\DependencyInjection.php
DependencyInjection.php:
namespace UsefullNamespace;
use [...];
class DependencyInjection extends ContainerBuilder
{