我的配置:
...
'components' => array(
'api' => array(
'class' => 'common.extensions.Api.Api'
)
...
)
...
...
'components' => array(
'api' => array(
'class' => 'common.extensions.Api.Api'
)
...
)
...
命名空间Guzzle \ Http;
Guzzle是通过作曲家安装的。
当我通过webapp运行API请求时,一切正常
当我通过控制台应用程序运行API时,会抛出以下错误 PHP致命错误:Class' Guzzle \ Http \ Client'在第20行的/var/www/core/trunk/common/extensions/Api/Api.php中找不到
任何想法下一步该做什么?任何帮助表示赞赏!提前谢谢!
答案 0 :(得分:1)
找到解决方案:
Api.php
require 'vendor/autoload.php'; // <-- I had to include this line so the class to be loaded
use Guzzle\Http\Client;
答案 1 :(得分:0)
首先,验证文件Guzzle/Http/Client.php
是否存在(我想是的,因为你可以在webapp中使用扩展名)。
其次,在控制器类文件的开头,插入以下行:
Yii::import('application.vendors.*');
require_once('Guzzle/Http/Client.php');
使用命名空间的第三方库
为了使用PSR-0之后的命名空间库(例如Zend Framework 2或Symfony2),您需要将其根目录注册为路径别名。
Yii::setPathOfAlias('Guzzle',Yii::getPathOfAlias('application.vendors.Guzzle'));
在上面的代码中,我们定义的别名的名称应该与库中使用的第一个名称空间部分匹配。
如果这一切都行不通,那么它可能是一个非常奇怪的Yii bug与控制台应用程序的引用(也有同样的问题):
Larry Ullmans论坛的问题:
我的问题: Using box/spout 3rd party library in Yii application command
使用第三方自动加载器
某些第三方库(例如PHPUnit)使用自己的类自动加载器,它们按规则执行类文件包含,这与Yii自动加载器中使用的不同。
为了避免此类问题,请确保在Yii自动加载器之前注册任何第三方类自动加载器。
require_once('vendor/autoload.php'); // register 3rd-party autoloader
require_once('/path/to/framework/yii.php'); // register Yii autoloader
如果第三方类自动加载器作为分离的函数或方法出现,您可以使用Yii::registerAutoloader()
方法进行注册。在这种情况下,Yii会自动将它添加到自己的自动加载器之前。
require_once('/path/to/framework/yii.php'); // register Yii autoloader
...
Yii::registerAutoloader(array('SomeLibrary','autoload')); // register 3rd-party autoloader
...