使用sparks&设置codeigniter时出现问题积极的记录

时间:2013-09-25 13:35:29

标签: php mysql codeigniter-2 phpactiverecord

我在使用sparks安装

进行codeigniter安装时遇到问题

以下是我采取的步骤如下:

  1. 我通过我的codeigniter访问了我的PHPCLI项目文件夹的根目录,使用以下命令安装了火花

    php -r "$(curl -fsSL http://getsparks.org/go-sparks)"
    
  2. 我使用下面的spark命令安装了活动记录库

    php tools\spark install -v0.0.2 php-activerecord
    
  3. 2a上。这个命令给了我下面的文件夹结构

    -application
    -sparks
       -php-activerecord
          -0.0.2
             -config
             -variables
             -vendor
    -system
    -tests
    -tools
       -lib
          -spark
             -sparktypes
       -test
    -user_guide
    

    2B。此命令生成一个sparks包含php active record文件夹,构成php-activerecord的必要组件,使用该命令生成MY_Loader.php文件,如下所示

    <?php  if (! defined('BASEPATH')) exit('No direct script access allowed');
    /**
     * Sparks
     *
     * An open source application development framework for PHP 5.1.6 or newer
     *
     * @package     CodeIgniter
     * @author      CodeIgniter Reactor Dev Team
     * @author      Kenny Katzgrau <katzgrau@gmail.com>
     * @since       CodeIgniter Version 1.0
     * @filesource
     */
    
    /**
     * Loader Class
     *
     * Loads views and files
     *
     * @package     CodeIgniter
     * @subpackage  Libraries
     * @author      CodeIgniter Reactor Dev Team
     * @author      Kenny Katzgrau <katzgrau@gmail.com>
     * @category    Loader
     * @link        http://codeigniter.com/user_guide/libraries/loader.html
     */
    class MY_Loader extends CI_Loader
    {
        /**
         * Keep track of which sparks are loaded. This will come in handy for being
         *  speedy about loading files later.
         *
         * @var array
         */
        var $_ci_loaded_sparks = array();
    
        /**
         * Is this version less than CI 2.1.0? If so, accomodate
         * @bubbafoley's world-destroying change at: http://bit.ly/sIqR7H
         * @var bool
         */
        var $_is_lt_210 = false;
    
        /**
         * Constructor. Define SPARKPATH if it doesn't exist, initialize parent
         */
        function __construct()
        {
            if(!defined('SPARKPATH'))
            {
                define('SPARKPATH', 'sparks/');
            }
    
            $this->_is_lt_210 = (is_callable(array('CI_Loader', 'ci_autoloader'))
                                   || is_callable(array('CI_Loader', '_ci_autoloader')));
    
            parent::__construct();
        }
    
        /**
         * To accomodate CI 2.1.0, we override the initialize() method instead of
         *  the ci_autoloader() method. Once sparks is integrated into CI, we
         *  can avoid the awkward version-specific logic.
         * @return Loader
         */
        function initialize()
        {
            parent::initialize();
    
            if(!$this->_is_lt_210)
            {
                $this->ci_autoloader();
            }
    
            return $this;
        }
    
        /**
         * Load a spark by it's path within the sparks directory defined by
         *  SPARKPATH, such as 'markdown/1.0'
         * @param string $spark The spark path withint he sparks directory
         * @param <type> $autoload An optional array of items to autoload
         *  in the format of:
         *   array (
         *     'helper' => array('somehelper')
         *   )
         * @return <type>
         */
        function spark($spark, $autoload = array())
        {
            if(is_array($spark))
            {
                foreach($spark as $s)
                {
                    $this->spark($s);
                }
            }
    
            $spark = ltrim($spark, '/');
            $spark = rtrim($spark, '/');
    
            $spark_path = SPARKPATH . $spark . '/';
            $parts      = explode('/', $spark);
            $spark_slug = strtolower($parts[0]);
    
            # If we've already loaded this spark, bail
            if(array_key_exists($spark_slug, $this->_ci_loaded_sparks))
            {
                return true;
            }
    
            # Check that it exists. CI Doesn't check package existence by itself
            if(!file_exists($spark_path))
            {
                show_error("Cannot find spark path at $spark_path");
            }
    
            if(count($parts) == 2)
            {
                $this->_ci_loaded_sparks[$spark_slug] = $spark;
            }
    
            $this->add_package_path($spark_path);
    
            foreach($autoload as $type => $read)
            {
                if($type == 'library')
                    $this->library($read);
                elseif($type == 'model')
                    $this->model($read);
                elseif($type == 'config')
                    $this->config($read);
                elseif($type == 'helper')
                    $this->helper($read);
                elseif($type == 'view')
                    $this->view($read);
                else
                    show_error ("Could not autoload object of type '$type' ($read) for spark $spark");
            }
    
            // Looks for a spark's specific autoloader
            $this->ci_autoloader($spark_path);
    
            return true;
        }
    
        /**
         * Pre-CI 2.0.3 method for backward compatility.
         *
         * @param null $basepath
         * @return void
         */
        function _ci_autoloader($basepath = NULL)
        {
            $this->ci_autoloader($basepath);
        }
    
        /**
         * Specific Autoloader (99% ripped from the parent)
         *
         * The config/autoload.php file contains an array that permits sub-systems,
         * libraries, and helpers to be loaded automatically.
         *
         * @param array|null $basepath
         * @return void
         */
        function ci_autoloader($basepath = NULL)
        {
            if($basepath !== NULL)
            {
                $autoload_path = $basepath.'config/autoload'.EXT;
            }
            else
            {
                $autoload_path = APPPATH.'config/autoload'.EXT;
            }
    
            if(! file_exists($autoload_path))
            {
                return FALSE;
            }
    
            include($autoload_path);
    
            if ( ! isset($autoload))
            {
                return FALSE;
            }
    
            if($this->_is_lt_210 || $basepath !== NULL)
            {
                // Autoload packages
                if (isset($autoload['packages']))
                {
                    foreach ($autoload['packages'] as $package_path)
                    {
                        $this->add_package_path($package_path);
                    }
                }
            }
    
            // Autoload sparks
            if (isset($autoload['sparks']))
            {
                foreach ($autoload['sparks'] as $spark)
                {
                    $this->spark($spark);
                }
            }
    
            if($this->_is_lt_210 || $basepath !== NULL)
            {
                if (isset($autoload['config']))
                {
                    // Load any custom config file
                    if (count($autoload['config']) > 0)
                    {
                        $CI =& get_instance();
                        foreach ($autoload['config'] as $key => $val)
                        {
                            $CI->config->load($val);
                        }
                    }
                }
    
                // Autoload helpers and languages
                foreach (array('helper', 'language') as $type)
                {
                    if (isset($autoload[$type]) AND count($autoload[$type]) > 0)
                    {
                        $this->$type($autoload[$type]);
                    }
                }
    
                // A little tweak to remain backward compatible
                // The $autoload['core'] item was deprecated
                if ( ! isset($autoload['libraries']) AND isset($autoload['core']))
                {
                    $autoload['libraries'] = $autoload['core'];
                }
    
                // Load libraries
                if (isset($autoload['libraries']) AND count($autoload['libraries']) > 0)
                {
                    // Load the database driver.
                    if (in_array('database', $autoload['libraries']))
                    {
                        $this->database();
                        $autoload['libraries'] = array_diff($autoload['libraries'], array('database'));
                    }
    
                    // Load all other libraries
                    foreach ($autoload['libraries'] as $item)
                    {
                        $this->library($item);
                    }
                }
    
                // Autoload models
                if (isset($autoload['model']))
                {
                    $this->model($autoload['model']);
                }
            }
        }
    }
    
    1. 我修改我的autoload.php以包含php活动记录,如下所示

      $autoload['sparks'] = array('php-activerecord/0.0.2');
      
    2. 当我运行我的codeigniter网站时,我收到以下错误

      A PHP Error was encountered
      
      Severity: Notice
      
      Message: Use of undefined constant EXT - assumed 'EXT'
      
      Filename: core/MY_Loader.php
      
      Line Number: 174
      
      Backtrace:
      
      File: C:\xampp\htdocs\orm\application\core\MY_Loader.php
      Line: 174
      Function: _exception_handler
      
      File: C:\xampp\htdocs\orm\application\core\MY_Loader.php
      Line: 154
      Function: ci_autoloader
      
      File: C:\xampp\htdocs\orm\application\core\MY_Loader.php
      Line: 67
      Function: initialize
      
      File: C:\xampp\htdocs\orm\index.php
      Line: 274
      Function: require_once
      

      我很好奇可能导致此错误的原因是什么?如果我缺少任何其他配置或者我犯了错误,请告诉我。

3 个答案:

答案 0 :(得分:16)

EXT在您的根index.php文件中定义。

// The PHP file extension
// this global constant is deprecated.
define('EXT', '.php');

看看它是否仍然存在?

答案 1 :(得分:0)

如果没有常量,你也可以在不使用常量的情况下定义autoload.php。

答案 2 :(得分:0)

我知道这是一个旧帖子,但希望这会节省一些时间...我有同样的问题,上面的修复不起作用。我最后通过删除RewriteBase修复了htaccess文件中的问题,虽然我不知道为什么这会导致问题出现。

刚刚将该行注释如下:

RewriteBase /

#RewriteBase /