我无法在 Symfony 1.4 中使用 Symfony2 的自动加载器来加载这个命名空间 类
I can't use Autoloader from Symfony2 in Symfony 1.4 for load this namespaced classes
我想在我的 Symfony 1.4 项目中使用带有命名空间 classes 的 php 库:https://github.com/donquixote/cellbrush.
我不太熟悉命名空间的概念。所以当我第一次尝试使用这个库的主要 class 时,根据它的文档,我只是做了:
$table = \Donquixote\Cellbrush\Table\Table::create();
我遇到了这个致命错误:
Fatal error: Class 'Donquixote\Cellbrush\Table\Table' not found in D:\SF_ROOT_DIR\apps\frontend\modules\home\actions\actions.class.php
所以我搜索了一个解决方案,据说有一个:Whosebug sol 1, Whosebug sol 1 eg,但是当我尝试实施它时,我仍然遇到上述错误。
我的情况:
感兴趣的目录和文件:
D:\SF_ROOT_DIR\lib\autoload\sfClassLoader.class.php
D:\SF_ROOT_DIR\lib\vendor\ClassLoader (contains:
https://github.com/symfony/ClassLoader/tree/2.6)
D:\SF_ROOT_DIR\lib\vendor\cellbrush-1.0 (contains:
https://github.com/donquixote/cellbrush.)
代码:
SF_ROOT_DIR/config/ProjectConfiguration.class.php
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
require_once dirname(__FILE__) . '/../lib/autoload/sfClassLoader.class.php';
use Symfony\Component\ClassLoader\UniversalClassLoader;
use Symfony\Component\ClassLoader\ApcUniversalClassLoader;
sfCoreAutoload::register();
class ProjectConfiguration extends sfProjectConfiguration
{
public function setup()
{
$this->namespacesClassLoader();
$this->enableAllPluginsExcept('sfPropelPlugin');
}
public function namespacesClassLoader() {
if (extension_loaded('apc')) {
$loader = new ApcUniversalClassLoader('S2A');
} else {
$loader = new UniversalClassLoader();
}
$loader->registerNamespaces(array(
'Donquixote' => __DIR__ . '/../lib/vendor/cellbrush-1.0/src/Table'));
$loader->register();
}
}
动作。class.php
$table = \Donquixote\Cellbrush\Table\Table::create();
谢谢。
使用 composer 及其自动加载。
执行:
composer require donquixote/cellbrush
现在库已经安装到vendor目录,自动加载器也生成了,你只需要包含它。将此行添加到 config/ProjectConfiguration.class.php
的顶部:
require_once dirname(__FILE__).'/../vendor/autoload.php';
我想在我的 Symfony 1.4 项目中使用带有命名空间 classes 的 php 库:https://github.com/donquixote/cellbrush.
我不太熟悉命名空间的概念。所以当我第一次尝试使用这个库的主要 class 时,根据它的文档,我只是做了:
$table = \Donquixote\Cellbrush\Table\Table::create();
我遇到了这个致命错误:
Fatal error: Class 'Donquixote\Cellbrush\Table\Table' not found in D:\SF_ROOT_DIR\apps\frontend\modules\home\actions\actions.class.php
所以我搜索了一个解决方案,据说有一个:Whosebug sol 1, Whosebug sol 1 eg,但是当我尝试实施它时,我仍然遇到上述错误。
我的情况:
感兴趣的目录和文件:
D:\SF_ROOT_DIR\lib\autoload\sfClassLoader.class.php
D:\SF_ROOT_DIR\lib\vendor\ClassLoader (contains: https://github.com/symfony/ClassLoader/tree/2.6)
D:\SF_ROOT_DIR\lib\vendor\cellbrush-1.0 (contains: https://github.com/donquixote/cellbrush.)
代码:
SF_ROOT_DIR/config/ProjectConfiguration.class.php
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
require_once dirname(__FILE__) . '/../lib/autoload/sfClassLoader.class.php';
use Symfony\Component\ClassLoader\UniversalClassLoader;
use Symfony\Component\ClassLoader\ApcUniversalClassLoader;
sfCoreAutoload::register();
class ProjectConfiguration extends sfProjectConfiguration
{
public function setup()
{
$this->namespacesClassLoader();
$this->enableAllPluginsExcept('sfPropelPlugin');
}
public function namespacesClassLoader() {
if (extension_loaded('apc')) {
$loader = new ApcUniversalClassLoader('S2A');
} else {
$loader = new UniversalClassLoader();
}
$loader->registerNamespaces(array(
'Donquixote' => __DIR__ . '/../lib/vendor/cellbrush-1.0/src/Table'));
$loader->register();
}
}
动作。class.php
$table = \Donquixote\Cellbrush\Table\Table::create();
谢谢。
使用 composer 及其自动加载。
执行:
composer require donquixote/cellbrush
现在库已经安装到vendor目录,自动加载器也生成了,你只需要包含它。将此行添加到 config/ProjectConfiguration.class.php
的顶部:
require_once dirname(__FILE__).'/../vendor/autoload.php';