2015-01-02 102 views
2

我試圖將一個專有的第三方庫集成到我的CakePHP應用程序中。我能在手冊中找到的是App Class部分,但它基本上是一組示例,而不是一個正確的解釋,所以我試圖猜測。加載第三方非CakePHP庫

我,你應該使用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(); 

...三ggers:

Error: Class 'Foo' not found 

CakePHP如何知道庫類,但不會加載它們?

+0

您是否在項目中使用了composer,供應商庫是否也支持composer? – burzum

+0

我看到了'composer.json'文件,但我對它並不熟悉。 –

+0

您是否熟悉其他軟件包管理員?作曲家非常相似,現在是PHP世界的常用工具。我建議你使用它,因爲它帶有一個標準的自動加載器,你也可以通過它來管理你的依賴關係。 http://book.cakephp.org/2.0/en/installation/advanced-installation.html#installing-cakephp-with-composer – burzum

回答

0

顯然,目錄路徑需要有一個結尾的斜線:

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

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

這只是強制性的,但其不作爲似乎沒有觸發任何錯誤消息。

+0

爲什麼它會產生一個錯誤,因爲它畢竟產生了一個有效的路徑:'APP。 '供應商'。 DS。 'Acme'。 DS。 'API-1.0'。 DS。 'base'和'foobar'。 DS'成爲'APP。 '供應商'。 DS。 'Acme'。 DS。 'API-1.0'。 DS。 'basefoobar'。 DS'。 – mark

+0

@mark - 我真的無法弄清楚這個用例。沒關係,我永遠不會忘記再次斜線:) –