【问题标题】:Troubleshooting composer: classes not autoloading with CodeIgniter 3排错作曲家:类不使用 CodeIgniter 3 自动加载
【发布时间】:2017-01-31 09:28:27
【问题描述】:

问题

我正在尝试使用 PayPal Checkout REST SDK,它需要通过 composer 自动加载 PayPal 库。我已经完成了在 CodeIgniter 3 中启用 Composer 的步骤,但是当我转到自动加载 PayPal\Rest\ApiContext 类的控制器时,出现以下错误:

致命错误:在中找不到类“PayPal\Rest\ApiContext” C:\xampp\htdocs\php\toucan-talk\App\modules\paypal\controllers\Paypal.php 在第 15 行

我目前所拥有的

这是我的 composer.json 文件

{
    "require": {
        "paypal/rest-api-sdk-php" : "*"
    }
}

我在我的 config.php 文件中设置了$config['composer_autoload'] = TRUE;

这是我的控制器

<?php

use PayPal\Rest\ApiContext;

class Paypal extends MX_Controller
{
    public function __construct()
    {
        $api = new ApiContext(

        );
        var_dump($api);
    }

}

问题

如何对 composer 及其自动加载器进行故障排除,以便确定自动加载过程失败的位置。

【问题讨论】:

    标签: php codeigniter composer-php autoload


    【解决方案1】:

    对于其他可能遇到此问题的人。 Codeigniter 3 在应用程序中有 third_party 文件夹,用于放置供应商目录(供应商目录包含库)。

    composer.json (/composer.json)

    告诉 composer 使用 third_party 文件夹中的 vendor 目录来存储库

    "config": {
        "vendor-dir": "application/third_party/vendor"
    },
    

    config.php (/application/config/config.php)

    告诉 Codeigniter 3 自动加载 third_party/vendor 文件夹中的所有库

    $config['composer_autoload'] = APPPATH . 'third_party/vendor/autoload.php';
    

    PS:在每个请求上自动加载所有库可能会导致网站速度变慢,如果有很多依赖项和中等到高流量的网站。如果是这种情况,请根据需要加载库。

    【讨论】:

      【解决方案2】:

      我知道这是一个相当老的问题,但我仍然想提出我的意见,基本上 CodeIgniter 3 特别是 3.1.6 有问题,当你这样做时

       $config['composer_autload'] = TRUE:
      

      那么它将不起作用并且不会从供应商文件夹中自动加载文件,现在对于“Jethro Hazelhurst”已经提到的这个解决方案有两种可能的解决方案。

      另一个简单的解决方案是将composer.json复制到应用程序文件夹中,然后从应用程序文件夹运行composer install,或者将供应商文件夹连同composer.json和composer.lock一起移动到应用程序文件夹,然后这个TRUE值将起作用正确。

      谢谢。

      【讨论】:

        【解决方案3】:

        这里是解决方案:在 config.php 中而不是设置...

        $config['composer_autoload'] = TRUE; 
        

        你需要放

        $config['composer_autoload'] = FCPATH . 'vendor/autoload.php'; 
        

        但是我仍然不确定为什么这与原始文档的建议相反。真的有点头疼。

        【讨论】:

        • 非常感谢您的回答,它对我帮助很大。显然,如果您将供应商文件夹安装在 /application/vendor 中,它可以与 composer_autoload = TRUE 一起使用,但如果您将其放在根文件夹中,则它需要完整路径:)
        • 哟!很好的解决方法。尝试了很多不同的东西,但这一个确实有效。
        • 真正的方法只有在您的供应商文件夹在应用程序文件夹中时才有效
        【解决方案4】:

        您可以在命令提示符下使用 composer dump-autoload。这将重新生成要包含在项目中的文件列表。

        【讨论】:

        • 嗨,所以我这样做了,但仍然无法正常工作,不过感谢您的建议。
        • paypal 包是否包含在该列表中?
        • 不,它只是返回“生成自动加载文件”,然后返回提示。提前道歉没有提及,我对命令行非常不熟悉,因此提出了这个问题。
        • 我没有错过 composer.json 文件中的“PSR-4 AUTOLOAD”位吗?
        • 我需要将$config['composer_autoload'] = TRUE; 放入我的config.php 文件中
        猜你喜欢
        • 2014-08-15
        • 2014-04-24
        • 2021-12-18
        • 1970-01-01
        • 2013-03-05
        • 2018-10-01
        • 2016-03-06
        相关资源
        最近更新 更多