【问题标题】:Load third-party non-CakePHP library加载第三方非 CakePHP 库
【发布时间】:2015-01-02 10:00:06
【问题描述】:

我正在尝试将专有的第三方库集成到我的 CakePHP 应用程序中。我在手册中只能找到App Class 部分,但它基本上是一组示例,而不是正确的解释,所以我试图猜测。

我的印象是您应该尽可能使用App::uses() 替代方案,起初我认为我很幸运,因为这段代码:

App::build(
    array(
        'Vendor' => array(
            APP . 'Vendor' . DS . 'Acme' . DS. 'API-1.0' . DS . 'base',
            APP . 'Vendor' . DS . 'Acme' . DS. 'API-1.0' . DS . 'foo',
            APP . 'Vendor' . DS . 'Acme' . DS. 'API-1.0' . DS . 'bar',
        )
    )
);
debug(App::objects('Vendor'));

...产生这个输出:

array(
    (int) 0 => 'Autoload',
    (int) 1 => 'ConstantsBase',
    (int) 2 => 'Foo',
    (int) 3 => 'Bar',
)

但是,我不能这样做:

App::uses('Foo', 'Vendor');
new Foo();

...触发器:

Error: Class 'Foo' not found 

CakePHP 怎么知道库类但不加载它们?

【问题讨论】:

  • 您是否在项目中使用了composer,供应商库是否也支持composer?
  • 我看到composer.json 文件到处都是,但我不熟悉。
  • 您是否熟悉其他包管理器,例如 bower? Composer 非常相似,并且是现在 php 世界中的常用工具。我建议你使用它,因为它带有一个标准的自动加载器,你也可以通过它管理你的依赖关系。 book.cakephp.org/2.0/en/installation/…
  • @burzum 我用过 Node 的 npm,Composer 肯定在我的待办事项列表中。但是这个特殊的库对 Composer 不友好。

标签: php cakephp cakephp-2.3


【解决方案1】:

显然,目录路径需要有一个尾部斜杠:

// Incorrect
APP . 'Vendor' . DS . 'Acme' . DS. 'API-1.0' . DS . 'base',

// Correct
APP . 'Vendor' . DS . 'Acme' . DS. 'API-1.0' . DS . 'base' . DS,

这只是强制性的,尽管它的省略似乎不会触发任何错误消息。

【讨论】:

  • 为什么它应该创建一个错误,因为它确实产生了一个有效的路径:APP . 'Vendor' . DS . 'Acme' . DS. 'API-1.0' . DS . 'base' 和 'foobar' . DS 变成 APP . 'Vendor' . DS . 'Acme' . DS. 'API-1.0' . DS . 'basefoobar' . DS。
  • @mark - 老实说,我想不出一个用例。没关系,我再也不会忘记斜杠了:)
猜你喜欢
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 2011-12-30
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多