【问题标题】:Yii console app - Class 'Guzzle\Http\Client' not foundYii 控制台应用程序 - 找不到类“Guzzle\Http\Client”
【发布时间】:2015-05-26 07:26:44
【问题描述】:

我的配置:

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

/trunk/vendor/guzzle

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

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

控制台配置:/trunk/console/config/main.php

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

客户端.php

命名空间 Guzzle\Http;


Guzzle 是通过 composer 安装的。

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

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

知道下一步该做什么吗?任何帮助表示赞赏!提前致谢!

【问题讨论】:

    标签: web-applications yii console-application guzzle


    【解决方案1】:

    找到解决方案:

    API.php

    require 'vendor/autoload.php'; // <-- I had to include this line so the class to be loaded
    use Guzzle\Http\Client;
    

    【讨论】:

    • 想扩展我的答案,不知道 Guzzle 使用自动加载。
    【解决方案2】:

    首先,验证文件Guzzle/Http/Client.php是否存在(我猜是,因为你可以在webapp中使用扩展名)。

    其次,在控制器类文件的开头,插入以下行:

    Yii::import('application.vendors.*');
    require_once('Guzzle/Http/Client.php');
    

    使用命名空间的第 3 方库

    为了使用遵循 PSR-0 的命名空间库(例如 Zend Framework 2 或 Symfony2),您需要将其根注册为路径别名。

    Yii::setPathOfAlias('Guzzle',Yii::getPathOfAlias('application.vendors.Guzzle'));
    

    在上面的代码中,我们定义的别名名称应该与库中使用的第一个命名空间部分匹配。

    如果这一切都不起作用,那可能是控制台应用程序中一个非常奇怪的 Yii 错误的参考(也有同样的问题):

    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

    使用第 3 方自动加载器

    一些 3rd-Party 库(例如 PHPUnit)使用他们自己的类自动加载器,它们通过规则执行类文件包含,这与 Yii 自动加载器中使用的不同。

    为避免此类问题,请确保在 Yii 自动加载器之前注册任何 3rd-party 类自动加载器。

    require_once('vendor/autoload.php'); // register 3rd-party autoloader
    require_once('/path/to/framework/yii.php'); // register Yii autoloader
    

    如果 3rd-party 类自动加载器作为单独的函数或方法来,您可以使用Yii::registerAutoloader() 方法注册它。在这种情况下,Yii 会自动在自动加载器之前添加它。

    require_once('/path/to/framework/yii.php'); // register Yii autoloader
    ...
    Yii::registerAutoloader(array('SomeLibrary','autoload')); // register 3rd-party autoloader
    ...
    

    (c) source

    【讨论】:

    • 感谢您的评论。我像这样在 Api.php 中包含了这个类。对于 webapp 它可以工作,所以我想这不是问题。使用 Guzzle\Http\Client;还将库导入 main.php 'import' => array('application.vendor.guzzle.*', ...
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    相关资源
    最近更新 更多