我在CakePHP 3中运行了一个应用程序,并通过Composer安装了我的软件包。
最近,我添加了phpspec/php-diff
(https://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()
中所做的那样)。< / p>
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
?如果我只是像这样使用它,那就错误地说
Class&#39; App \ Controller \ Diff_Renderer_Html_Inline&#39;找不到
我认为另一种解决方法可能是更改require_once
中的路径,以便它指向vendor/
中的位置。但肯定有更好的解决方案吗?
答案 0 :(得分:2)
如果您尝试从另一个名称空间引用某个类,则需要使用其完全限定名称来引用它,例如
new \Diff_Renderer_Html_Inline;
或者在命名空间声明后添加use Diff_Renderer_Html_Inline
即可:new Diff_Renderer_Html_Inline