在CodeIgniter中安装omnipay时出错



我试图在CodeIgniter(2.2.4版)中添加omnipay,我按照使用此链接安装composer的说明:https://philsturgeon.uk/blog/2012/05/composer-with-codeigniter/

但是我有这个错误:

    Fatal error: Uncaught exception 'OmnipayCommonExceptionRuntimeException' with message 'Class 'OmnipayPayPal ExpressGateway' not found' in C:xampphtdocstestservervendoromnipaycommonsrcOmnipayCommonGatewayFactory.php:105
    Stack trace: #0 [internal function]: OmnipayCommonGatewayFactory->create('PayPal Express')
    #1 C:xampphtdocstestservervendoromnipaycommonsrcOmnipayOmnipay.php(103): call_user_func_array(Array, Array)
    #2 C:xampphtdocstestserverapplicationcontrollersTest.php(18): OmnipayOmnipay::__callStatic('create', Array)
    #3 C:xampphtdocstestserverapplicationcontrollersTest.php(18): OmnipayOmnipay::create('PayPal Express')
    #4 [internal function]: Test->Pay()
    #5 C:xampphtdocstestserversystemcoreCodeIgniter.php(360): call_user_func_array(Array, Array)
    #6 C:xampphtdocstestserverindex.php(203): require_once('C:xampphtdocs...')
    #7 {main} thrown in C:xampphtdocstestservervendoromnipaycommonsrcOmnipayCommonGatewayFactory.php on line 105

我已经遵循了这篇文章的建议(CodeIgniter + omnipay安装),但他们的建议都不适合我。

我使用codeigniter 2.2.4和apache 5.4.19

有谁能帮我解决这个问题吗?

我想我解决了。我发现FCPATH . 'vendor'自动加载和APPPATH可能会发生碰撞。'core'类自动加载。如果你试图从CI_MY_前缀的核心类扩展你的控制器,我相信这会起作用。另一方面,如果您尝试使用不以CI_MY_或您配置的任何内容开始的核心类,则无法从供应商目录中找到所需的类。

我玩了一下,发现如果你改变配置文件中用于自动加载核心类的代码,它就会起作用。你可以使用

function __autoload($class)
{
    if(strpos($class, 'CI_') !== 0)
    {
        include_once( APPPATH . 'core/'. $class . EXT );
    }
}

function __autoload($class) {
    if (substr($class,0,3) !== 'CI_') {
        if (file_exists($file = APPPATH . 'core/' . $class . EXT)) {
            include $file;
        }
    }
}

我把那个文件换成了这个文件:

spl_autoload_register(function ($class) {
    if (substr($class,0,3) !== 'CI_') {
        if (file_exists($file = APPPATH . 'core/' . $class . EXT)) {
            include $file;
        }
    }
});

刚刚测试过,运行正常。

这是所有这些需要一步一步的过程:

1。下载omnipay到root/vandor目录。如果你没有其他的供应商依赖,在index.php文件旁边新建composer.json文件,下一个代码:

    {
        "require": {
            "omnipay/omnipay": "~2.0"
        }
    }

2。将控制台导航到项目的根文件夹,其中还包括新创建的json文件。

3。启动命令composer install

4。在应用程序启动前包含编写器自动加载文件。一种方法是在index.php文件的末尾,在行

之前的
    require_once BASEPATH.'core/CodeIgniter.php';

,输入下一个代码:

require_once __DIR__.'/vendor/autoload.php';

5。APPPATH . 'config/config.php'文件的末尾,放置以下代码片段以使用核心类:

    spl_autoload_register(function ($class) {
        if (substr($class,0,3) !== 'CI_') {
            if (file_exists($file = APPPATH . 'core/' . $class . EXT)) {
                include $file;
            }
        }
    });

6。在定义类之前,在控制器文件的开头使用所需的供应商类:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    use OmnipayOmnipay;
    use OmnipayCommonGatewayFactory;
    class Test extends Back_Controller
    {
        function __construct()
        {
            parent::__construct();
        }
        public function index()
        {
            var_dump(new Omnipay);
            var_dump(new GatewayFactory);
        }
    }

相关内容

  • 没有找到相关文章

最新更新