这里只简单介绍一下windows下通过composer安装程序安装。也许以后会写一篇文章来总结composer的安装和使用
下载Composer-Setup.exe,然后按照提示一步步的安装就行了。可参考Download Composer
检测composer是否已经安装成功:新建一个命令行窗口,然后执行命令composer -V,如果能正确输出composer的版本,那就说明安装成功了。
CodeIgniter安装配置是按照CI官方文档的安装说明配置的,且没有进行个性化设置,即没有设置$system_path、$application_folder和$view_folder。
在命令行中切换到CI的根目录,即composer.json所在的目录,执行命令
composer install
执行完成后,会出现vendor目录,vendor目录下有文件autoload.php。
修改文件application/config/config.php中的配置项$config[‘composer_autoload’]。修改它的值为上述autoload.php的路径(相对于index.php的路径),例如:$config['composer_autoload'] = 'vendor/autoload.php';
在CI根目录执行命令composer require smarty/smarty
Smarty是个php的模板引擎,这里仅用作测试。
修改文件application/controllers/Welcome.php,修改index方法如下:
public function index(){
$smarty = new Smarty();
var_dump($smarty);
}
如果没有提示找不到类Smarty,并且能正常输出$smarty的值(不是NULL)时,说明自动加载器已经正确启用了。
在application/controllers目录中创建文件Base.php。这是个自定义类,用来扩展CI_Controllers的类。顶级命名空间为app\,它对应的目录为application/。于是命名空间app\controlles\对应目录application/controllers/。(这应该是符合PSR-4的吧)内容如下
<?php
namespace app\controllers;
use CI_Controller;
defined('BASEPATH') OR exit('No direct script access allowed');
class Base extends CI_Controller{
public function index(){
echo 'This is a msg from class Base.';
}
}
在application/controllers目录中创建文件Demo.php。这个类用来作为CI中的控制器,要在浏览器中访问,因此不能给它设置命名空间,即不不能包含namaspace语句。其内容如下
<?php
use app\controllers\Base;
class Demo extends Base{
}
修改CI根目录中的composer.json。
为方便对比,防止改错,假设修改前的文件内容为
{
"description": "The CodeIgniter framework",
"name": "codeigniter/framework",
"type": "project",
"homepage": "https://codeigniter.com",
"license": "MIT",
"support": {
"forum": "http://forum.codeigniter.com/",
"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
"irc": "irc://irc.freenode.net/codeigniter",
"source": "https://github.com/bcit-ci/CodeIgniter"
},
"require": {
"php": ">=5.2.4",
"smarty/smarty": "^3.1"
},
"suggest": {
"paragonie/random_compat": "Provides better randomness in PHP 5.x"
},
"require-dev": {
"mikey179/vfsStream": "1.1.*",
"phpunit/phpunit": "4.* || 5.*"
}
}
修改后的文件内容(注意在前一项末尾加个英文逗号)
{
"description": "The CodeIgniter framework",
"name": "codeigniter/framework",
"type": "project",
"homepage": "https://codeigniter.com",
"license": "MIT",
"support": {
"forum": "http://forum.codeigniter.com/",
"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
"irc": "irc://irc.freenode.net/codeigniter",
"source": "https://github.com/bcit-ci/CodeIgniter"
},
"require": {
"php": ">=5.2.4",
"smarty/smarty": "^3.1"
},
"suggest": {
"paragonie/random_compat": "Provides better randomness in PHP 5.x"
},
"require-dev": {
"mikey179/vfsStream": "1.1.*",
"phpunit/phpunit": "4.* || 5.*"
},
"autoload": {
"psr-4": {
"App\\": "application/",
"App\\Controllers\\": "application/controllers/"
}
}
}
解释配置项autoload
"autoload": {
"psr-4": {
"app\\": "application/"
}
}
键名为顶级命名空间app\。这里使用app\,第一个\是转义符
键值为命名空间对应的目录application/
在CI根目录执行命令composer update
system/core/Codelgniter.php 第359行
// Load the base controller class
require_once BASEPATH.'core/Controller.php';
/*新增*/
require_once BASEPATH. 'core/Model.php';
第402行
$e404 = FALSE;
/*新增*/
$classNamespace = 'App\\Controllers\\';
if ($RTR->directory !== NULL) {
$classNamespace .= ucfirst( str_replace('/','\\', $RTR->directory) );
}
第417行
require_once(APPPATH.'controllers/'.$RTR->directory.$class.'.php');
// 添加Controller命名空间
$customizeClass = $classNamespace . $class;
$class = class_exists($customizeClass) ? $customizeClass : $class;
修改 system/core/Model.php 第57行
public function __construct()
{
/*新增*/
log_message('info', 'Model Class Initialized');
}
第77行
/*新增*/
//如果用到db类 就自动连接数据库
if ($key === 'db') {
get_instance()->load->database();
}
return get_instance()->$key;
浏览器访问index.php/demo,如果正常显示This is a msg from class Base.则说明配置成功。