2017-04-06 54 views
2

我有一個在CakePHP 3中運行的應用程序,並通過Composer安裝了我的軟件包。使用Composer時,引用PHP包的子類的正確方法是什麼?

最近我添加了phpspec/php-diffhttps://packagist.org/packages/phpspec/php-diff)並跑composer update。它已經把文件,如預期,在vendor/phpspec/php-diff/

我可以實例化類這樣我的CakePHP控制器之一:

// src/Controller/UrlsController.php 
// ... 

use Diff; 

public function test() 
{ 
    $diff = new Diff(foo, bar); 
    // This works 
} 

然而,此包的文檔給這個作爲https://github.com/chrisboulton/php-diff/blob/master/example/example.php#L43爲例後面實例化Diff(如上面test()所做的那樣)。

require_once dirname(__FILE__).'/../lib/Diff/Renderer/Html/Inline.php'; 
$renderer = new Diff_Renderer_Html_Inline; 
echo $diff->render($renderer); 

顯然require_once語句不工作,因爲這不是在那裏Inline.php生活作曲家層次。我們如何實例化new Diff_Renderer_Html_Inline?如果我只是用它這個樣子的錯誤說法

級「應用程序\控制器\ Diff_Renderer_Html_Inline」未找到

我想可能是改變require_once路徑另一個解決辦法,使其指向它在vendor/位置。但肯定有更好的解決方案?

+0

這是PSR-0式的自動加載(這作曲家支持),所以'新\ DIFF \渲染器\ HTML \ Inline'大概會工作(也許?) – apokryfos

+0

謝謝,我已經嘗試過,但它給出了一個類似的錯誤,'Class'Diff \ Renderer \ Html \ Inline'找不到' – Andy

+0

如果不是那麼'new \ Diff_Renderer_Html_Inline'(根NS相對)也許會工作 – apokryfos

回答

2

如果您試圖從另一個名稱空間內引用某個類,則需要使用其完全限定名稱引用該類,例如,

new \Diff_Renderer_Html_Inline; 

或命名聲明後添加use Diff_Renderer_Html_Inline要能夠做到:new Diff_Renderer_Html_Inline

相關問題