【问题标题】:I can't use Autoloader from Symfony2 in Symfony 1.4 for load this namespaced classes我不能在 Symfony 1.4 中使用 Symfony2 的 Autoloader 来加载这个命名空间类
【发布时间】:2015-07-30 18:05:12
【问题描述】:

我想在我的 Symfony 1.4 项目中使用这个带有命名空间类的 php 库:https://github.com/donquixote/cellbrush。

我对命名空间的概念不太熟悉。所以当我第一次尝试使用这个库的主类时,根据它的文档,我只是这样做了:

$table = \Donquixote\Cellbrush\Table\Table::create();

我得到了这个致命错误:

致命错误:在 D:\SF_ROOT_DIR\apps\frontend\modules\home\actions\actions.class.php 中找不到类 'Donquixote\Cellbrush\Table\Table'

所以我搜索了一个解决方案,据说有一个:stackoverflow sol 1,stackoverflow sol 1 eg,但是当我尝试实现它时,我仍然得到上述错误。

我的情况:

感兴趣的目录和文件:

D:\SF_ROOT_DIR\lib\autoload\sfClassLoader.class.php

D:\SF_ROOT_DIR\lib\vendor\ClassLoader(包含: https://github.com/symfony/ClassLoader/tree/2.6)

D:\SF_ROOT_DIR\lib\vendor\cellbrush-1.0(包含: 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();
    }
}

actions.class.php

$table = \Donquixote\Cellbrush\Table\Table::create();

谢谢。

【问题讨论】:

    标签: namespaces classloader symfony-1.4 autoload


    【解决方案1】:

    使用作曲家及其自动加载。

    执行:

    composer require donquixote/cellbrush
    

    现在该库已安装在 vendor 目录中并生成了自动加载器,您只需要包含它即可。将此行添加到config/ProjectConfiguration.class.php 的顶部:

    require_once dirname(__FILE__).'/../vendor/autoload.php';
    

    【讨论】:

    • 谢谢@Marek,您提出的替代方案效果很好。我以前从未使用过composer,所以我花了一些时间来安装。有两件事要补充:首先,真正需要的是:require_once dirname(__FILE__).'/../lib/vendor/autoload.php';,其次对于希望使用 cellbrush 库的 thouse 来说,遗憾的是需要 PHP 4 或更高版本。严格来说,这不是我提出的问题的精确解决方案,但它适用于更大的问题,因此是一个完美的替代方案,我推荐它,希望其他人可以帮助解决其他替代方案。
    猜你喜欢
    • 2014-03-30
    • 2011-09-09
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2018-02-04
    相关资源
    最近更新 更多