Yii控制台应用程序 - Class' Guzzle \ Http \ Client'未找到

时间:2015-05-26 07:26:45

标签: web-applications yii console-application guzzle

我的配置:

/trunk/common/extensions/Api/Api.php

/中继/供应商/狂饮

webapp config:/trunk/members/config/main.php

...
'components' => array(
        'api' => array(
            'class' => 'common.extensions.Api.Api'
        )
        ...
)
...

console config:/trunk/console/config/main.php

...
'components' => array(
        'api' => array(
            'class' => 'common.extensions.Api.Api'
        )
        ...
)
...

Client.php

命名空间Guzzle \ Http;

Guzzle是通过作曲家安装的。

当我通过webapp运行API请求时,一切正常

当我通过控制台应用程序运行API时,会抛出以下错误 PHP致命错误:Class' Guzzle \ Http \ Client'在第20行的/var/www/core/trunk/common/extensions/Api/Api.php中找不到

任何想法下一步该做什么?任何帮助表示赞赏!提前谢谢!

2 个答案:

答案 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论坛的问题:

http://www.larryullman.com/forums/index.php?/topic/3392-console-application-php-fatal-error-cannot-redeclare-class/

我的问题: 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
...

(c) source