CI修改如下:

	if($modle_file=config_item('modle_file'))
{
if ($modle_file === TRUE)
{
$modle_file=config_item('modle_type'); $MOF=& load_class('Newfile','core'); //$MOF->createModule($modle_file); //创建文件加载类
$MOF->createModule();
}
}

<?php /**
* 这是一个扩展类
*
* 主要用来添加 常用的model模块还有controller控制器
*/
defined('BASEPATH') OR exit('No direct script access allowed'); /**
* model、controller扩展类
*
* @package CodeIgniter
* @subpackage Libraries
* @category Logging
* @author shaonian
* @link
*/
class CI_Newfile
{ /**
* 常用模块列表
*
* @var array
*/
protected $_model_arr=['Admin']; //模块前戳
protected $_model_prefix='Model_'; //自定义模块
protected $custom_model=[]; /**
* 常用控制器列表
*
* @var int
*/
protected $_controller_arr = []; //自定义控制器
protected $custom_controller=[]; /**
* 目录权限
*
* @var int
*/
protected $_chmod = 0775; /**
* 创建时间
*
* @var string
*/
protected $_date_fmt = 'Y-m-d H:i:s'; //获取全部的定义
protected $_arr_info=[]; /**
* 控制类
*
* 其实这个类 也可以写在扩展里面 因为 ci本来就让扩展用法的
*
* 这里支持两种方法 一种 在定义的环境下config配置 一种定义下的直接读取单独个配置文件
*
* @return void
*/
public function __construct($is_build=false)
{
$config =& get_config(); //加载全局配置文件 if (!empty($config['custom_controller']))
{
$this->custom_controller=$config['custom_controller'];
} if (!empty($config['custom_model']))
{
$this->custom_model=$config['custom_model'];
}
} /**
* 根据路径创建模块
*
* @param [type] $path
* @return void
*/
public function createModule($is_type_system='new')
{ //根文件
// $Model_path_base=BASEPATH.'core/newfile/model/'.$is_type_system.DIRECTORY_SEPARATOR; // $this->mkdirs($Model_path_base); //递归创建目录 // $get_content=$this->file_get_contents_write($Model_path_base); //马上 //还有一种方法
/**
* $content=$get_content instanceof Iterator; 这个详细的方法 看php手册的 迭代接口
*/ // foreach($get_content as $model_key=>$content)
// { // //创建文件
// $this->mkdirs(APPPATH.'models/sys/'); // file_put_contents(APPPATH.'models/sys/'.$model_key.'.php', $content);
// } if(!empty($this->custom_model)) { //循环自定义的控制器
foreach($this->custom_model as $model_k=>$model_v) { if (strpos($model_v, '/')!==false) { //这段程序处理前面的目录的 支持无限极目录
$dir_arr=explode('/', rtrim($model_v, '/'));
array_pop($dir_arr);
$dir_str=(count($dir_arr)>=2)?implode('/', $dir_arr):$dir_str[0];
$this->mkdirs(APPPATH.'models/'.$dir_str.DIRECTORY_SEPARATOR); }
//读模板内容
$content_con=$this->modelTpl($this->_model_prefix.ucwords($model_v)); if(!empty($dir_str)) { $file_path=APPPATH.'models/'.$dir_str.DIRECTORY_SEPARATOR.$this->_model_prefix.ucwords($model_v).'.php'; }
$file_path=APPPATH.'models/'.$this->_model_prefix.ucwords($model_v).'.php'; if (file_exists($file_path)==true) { continue;
} //echo $file_path;
file_put_contents($file_path, $content_con); }
} } /**
* 这里用的是思想模板替换
* 这里我都没判断应用目录是否可写 这是不对的
*
* @param string $is_type_system
* @return void
*/
public function createController($is_type_system='new')
{
// //根文件
// $controller_path_base=BASEPATH.'core/newfile/controller/'.$is_type_system.DIRECTORY_SEPARATOR; // $this->mkdirs($controller_path_base); //递归创建目录 // $get_content=$this->file_get_contents_write($controller_path_base); // //这里创建常用的代码
// foreach($get_content as $controller_key=>$content)
// { // //创建文件
// $this->mkdirs(APPPATH.'controller/sys/'); // file_put_contents(APPPATH.'controller/sys/'.$controller_key.'.php', $content);
// } //这里创建配置文件中的控制器,支持层级创建目录 if(!empty($this->custom_controller)) { //循环自定义的控制器
foreach($this->custom_controller as $controller_k=>$controller_v) { if (strpos($controller_v, '/')!==false) { //这段程序处理前面的目录的 支持无限极目录
$dir_arr=explode('/', rtrim($controller_v, '/'));
array_pop($dir_arr);
$dir_str=(count($dir_arr)>=2)?implode('/', $dir_arr):$dir_str[0];
$this->mkdirs(APPPATH.'controller/'.$dir_str.DIRECTORY_SEPARATOR); }
//读模板内容
$content_con=$this->controolerTpl(ucwords($controller_v)); if(!empty($dir_str)) { $file_path=APPPATH.'controllers/'.$dir_str.DIRECTORY_SEPARATOR.ucwords($controller_v).'.php'; }
$file_path=APPPATH.'controllers/'.ucwords($controller_v).'.php'; if (file_exists($file_path)==true) { continue;
} //echo $file_path;
file_put_contents($file_path, $content_con); }
} } /**
* 生成controller模板
*
* @param [type] $controoler_name
* @return void
*/
public function controolerTpl($controoler_name)
{
$content='';
$content.="<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n\n\nclass {$controoler_name} extends MY_Controller\n{\n\n";
$content.=" public function __construct()\n {\n parent::__construct();\n }\n\n}"; return $content;
} public function modelTpl($model_name)
{
$content='';
$content.="<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n\n\nclass {$model_name} extends MY_Model\n{\n\n";
$content.=" public function __construct()\n {\n parent::__construct();\n }\n\n}"; return $content; } /**
* 创建目录
*
* @access protected
* @param string $dirname 目录名称
* @return void
*/
protected static function checkDirBuild($dirname)
{
!is_dir($dirname) && mkdir($dirname, 0755, true);
} /**
* 根据传入的 build 资料创建目录和文件
*
* @access public
* @param array $build build 列表
* @param string $namespace 应用类库命名空间
* @param bool $suffix 类库后缀
* @return void
* @throws Exception
*/
public static function run(array $build = [], $namespace = 'app', $suffix = false)
{
// 锁定
$lock = APP_PATH . 'build.lock'; // 如果锁定文件不可写(不存在)则进行处理,否则表示已经有程序在处理了
if (!is_writable($lock)) {
if (!touch($lock)) {
throw new Exception(
'应用目录[' . APP_PATH . ']不可写,目录无法自动生成!<BR>请手动生成项目目录~',
10006
);
} foreach ($build as $module => $list) {
if ('__dir__' == $module) {
// 创建目录列表
self::buildDir($list);
} elseif ('__file__' == $module) {
// 创建文件列表
self::buildFile($list);
} else {
// 创建模块
self::module($module, $list, $namespace, $suffix);
}
} // 解除锁定
unlink($lock);
}
} /*
* 创建文件
* @access protected
* @param array $list 文件列表
* @return void
*/
protected static function buildFile($list)
{
foreach ($list as $file) {
// 先创建目录
if (!is_dir(APP_PATH . dirname($file))) {
mkdir(APP_PATH . dirname($file), 0755, true);
} // 再创建文件
if (!is_file(APP_PATH . $file)) {
file_put_contents(
APP_PATH . $file,
'php' == pathinfo($file, PATHINFO_EXTENSION) ? "<?php\n" : ''
);
}
}
} /**
* 循环读取文件并创建
* 其实可以不用生成器的 反正就4个文件 file_Get_content直接读取 这些文件 还不到 10kb也挺快的
*/
public function file_get_contents_write($path)
{
foreach($this->_model_arr as $val)
{
if(!file_exists($path.strtolower($val).'.txt')) {
echo "你的文件{$this->_model_prefix}{$val}未找到,请放入后查看";exit(0);
}
yield $this->_model_prefix.$val=>file_get_contents($path.strtolower($val).'.txt');
}
} /**
* 递归创建目录
*
* @param [type] $dir
* @return void
*/
public function mkdirs($dir=null)
{
return is_dir($dir) or ($this->mkdirs(dirname($dir))) and mkdir($dir, 0755);
} //在这里要实现数据库的话 得调用文件的为 database.php 文件 //还得吧 loader的db文件拿过来用 这个类 可以在controller后面加载 }

ci框架根据配置自动生成controller控制器和model控制器(改版本)的更多相关文章

  1. 使用mybatis plus自动生成controller、service、dao、mapper、entity代码

    官网:http://mp.baomidou.com(这个项目不仅仅可以用于代码生成,还有分页等其他功能,是对mybatis的一层封装) 要求:基于sql自动生成domain.controller.se ...

  2. Spring Boot从入门到精通(十一)集成Swagger框架,实现自动生成接口文档

    Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.Swagger 是一组开源项目,其中主要要项目如下: Swagger-tools:提供各种与S ...

  3. SSM框架通过mybatis-generator自动生成代码

    一.首先eclipse配置好maven环境,并且创建好一个SSM框架的工程 二.在pom.xml中添加plugin <build> <finalName>ssm_web< ...

  4. CI框架基本配置/教你学习CI框架codelgniter

    CI框架现在中国可以说还是不成熟,不像thinkphp那样有那么多的中文手册,在国内,很多国人英语都很烂,CI现在教程还是不多.大家心里都存在这严重想法 CI 框架现在中国可以说还是不成熟,不像thi ...

  5. hibernate如何配置自动生成表

    hibernate自动生成表有两种方法: 1.直接写代码,通过方法来创建数据库表. 2.通过 hibernate.cfg.xml配置标签来创建数据表. 下面依次实现: 1.直接写代码,通过方法来创建数 ...

  6. unittest框架扩展(自动生成用例)自动化-上

    一.思想: 基于数据驱动和代码驱动结合的自动化测试框架. 二.自动化测试框架步骤: 1.获取用例,用例格式:.ymal 2.调用接口 3.校验结果 4.发送测试报告 5.异常处理 6.日志模块 三.基 ...

  7. ci框架 自定义配置方法

    系统自动在Application文件夹下生成的config.php文件,采用key-value关联数组的形式来存放配置项和值.为了使结构更清晰,手动新建另外一个配置文件myconfig.php,所采用 ...

  8. mybatis generator.xml 配置 自动生成model,dao,mapping

    generator.xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE gener ...

  9. Nginx 支持 CI 框架的配置并禁止使用 ip 访问

    #CIserver {        listen      80;        server_name www.ci.com;        index       index.php index ...

随机推荐

  1. 带着好奇心去探索IDEA

    带着好奇心去探索IDEA 工欲善其事必先利其器 软件是提高工作效率的工具.所以了解工具的特性,操作方式,能更好地使用它.一般使用掌握逻辑: 第一步:了解菜单栏-工具栏-其他窗口: 第二步:实战,真正利 ...

  2. 下载 node.js 步骤 bower npm 报错解决

    1,下载node.js  ,安装之后就可以 了 2,解决"npm不是内部或外部命令"   ,打开安装的node.js  的文件夹 将这个地址,放在环境变量里面 <1,属性环境 ...

  3. Nginx如何部署静态web项目

    环境准备 windows nginx web项目资源包 准备资源包 这里拿layuimini项目举例,从码云上克隆下来直接访问提示需要部署在web服务器当中才能正常浏览演示 准备Nginx 进入解压后 ...

  4. const、define 和 static 的区别

    目录 define.const static define.const 在 C++ 中,const 和 define 都可以用来定义常量.但是这二者之间有很大的区别: define 的作用 用 def ...

  5. JVM系列【2】Class文件结构

    JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 如何查看class字节码文件 在idea中可以通过插件BinEd来查看二进 ...

  6. Js电子时钟

    简单版电子时钟,需要以下几个步骤 1. 封装一个函数 返回当前的时分秒 2. 使用定时器使当前以获取到的系统时间走动,每间隔一面调用 3. 把获取到的时间放到span盒子里,添加样式 效果展示  实现 ...

  7. 第一期chrome浏览器的小技巧------《提高搜索效率》

    !!! 这次的技巧是:利用chrome提供的设置 提高你的搜索效率 !!! 我们经常遇到问题,搜索的时候很不方便 比如你在百度上搜索一个东西的时候正好没有搜到,那么你想找到这个东西的话,很明显要到其他 ...

  8. linux 查看nginx的安装路径等信息

    做个随笔,记录一下. 想查看nginx的配置文件,但不知道nginx是安装在哪个目录下? ps -ef | grep nginx Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的 ...

  9. rpc服务在游戏中的简单运用

    我们最开始做的游戏框架,多数都是client->server->db的模式,但是随着玩家数量的增加,一个server进程就会扛不住,需要多个进程服务于多个玩家.但是给定了不同进程的玩家,有 ...

  10. OpenCV(c++)-1 安装和配置OpenCV4.4(Windows+visual studio 2019)

    @ 目录 安装OpenCV4 在Windows系统安装OpenCV4 配置visual studio 2019 配置包含路径 验证配置结果 安装OpenCV4 OpenCV是一个基于BSD许可(开源) ...