分页类

最后更新于:2022-04-01 11:14:35

';

验证码类

最后更新于:2022-04-01 11:14:33

';

扩展:类库下载

最后更新于:2022-04-01 11:14:30

### 类库扩展 个人写的一些通用类库,可以加入到Idea框架中使用
';

附录

最后更新于:2022-04-01 11:14:28

';

关于作者

最后更新于:2022-04-01 11:14:26

### **关于作者** * * * * * **如何联系?** 电子邮箱:mail@ashub.cn 个人主页:https://ashub.cn >学习互助,欢迎骚扰!
';

辅助函数

最后更新于:2022-04-01 11:14:24

## 辅助函数 在框架中,内置了6个辅助函数 * 配置函数 `config('配置参数'[,参数值])` * 模型函数 `model('模型名'[,模型操作操作方法])` * 类库手动加载函数 `import('类库文件路径')` * 404设置函数 `notFound()` * 直接跳转函数 `direct(跳转URL)` * 提示等待跳转函数 `wait('跳转url','提示信息(可以为模板文件)','等待时间(单位:秒)')`
';

常量参考

最后更新于:2022-04-01 11:14:21

### 框架与定义常量如下: **常量声明必须全部大写以下划线分割** **框架内置常量目前共有17个,包含可二次定义常量7个** 当访问URL`http://127.0.0.1/Idea-framework/index.php?m=home&c=Index&a=index`时,各常量值如下表所示: | 常量 | 说明 | 权限 | 演示 | | --- | --- | --- | --- | | `FRAMEWORK_VERSION` | 框架版本 | 不可改 | `V1.0` | | `ROOT_PATH` | 网站根路径 | 可改 | `D:/php/www/Idea-framework/` | | `APP_NAME` | 应用目录名 | 可改 | `application` | | `APP_PATH` | 应用路径 | 可改 | `D:/php/www/Idea-framework/application/` | | `FRAMEWORK_NAME` | 框架版本目录名 | 可改 | `system` | | `FRAMEWORK_PATH` | 框架路径 | 可改 | `D:/php/www/Idea-framework/system/` | | `EXTEND_PATH` | 应用扩展路径 | 可改 | `D:/php/www/Idea-framework/application/extend/` | | `CONFIG_FILE` | 配置文件 | 可改 | `D:/php/www/Idea-framework/application/config/Config.php` | | `ENTRANCE` | 入口文件名 | 不可改 | `index.php` | | `MODULE` | 当前(模块、平台、分组)名 | 不可改 | `home` | | `CONTROLLER` | 当前控制器名 | 不可改 | `Index` | | `ACTION` | 当前当前操作方法名 | 不可改 | `index` | | `__ROOT__` | 网站根URL路径 | 不可改 | `http://127.0.0.1/Idea-framework/index.php` | | `__APP__` | 当前页面应用URL路径 | 不可改 | `http://127.0.0.1/Idea-framework/application` | | `__MODULE__` | 当前页面模块URL路径 | 不可改 | `http://127.0.0.1/Idea-framework/index.php?m=home` | | `__CONTROLLER__` | 当前页面控制器URL路径 | 不可改 | `http://127.0.0.1/Idea-framework/index.php?m=home&c=Index` | | `__ACTION__` | 当前页面操作URL路径 | 不可改 | `http://127.0.0.1/Idea-framework/index.php?m=home&c=Index&a=index` |
';

杂项

最后更新于:2022-04-01 11:14:19

';

Composer

最后更新于:2022-04-01 11:14:17

## 简介 Composer 是 PHP 的一个依赖管理工具。可以用来安装所使用的库需要的代码,包括外部包。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。利用Composer,在项目中加入适当的代码会很容易,不露不是项目开始时,还是决定讲一个包升级到更新版本时,都可以使用Composer安装所需的代码。[Packagist](https://packagist.org/) 是寻找Composer包的主要基地,它将提供数以万计的PHP包。 >[info] 作者这儿不对Composer做过多介绍,建议以前没有接触过的同学可以学习一下,按照Composer官方文档简单使用之后,你将会发现她的魅力所在。 快速访问: [Composer中文网](http://www.phpcomposer.com/) ## 在框架中使用Composer * 在Idea框架中,系统默认加载了`application/vendor/`目录下的自动加载器`autoload.php`。而在框架中,而且Composer的vendor目录也是默认放到了应用目录`/application`下面,所以我们需要在`composer.json`下面进行目录指定配置。 ~~~ "config": { "vendor-dir": "application/vendor" }, ~~~ * 如果不指定Composer的`vendor`目录。那么,Composer包将会被默认安装到站点根目录下。此时,我们需要修改下配置信息`application/config/Config.php`: 将 ~~~ 'composer_aotuload_file' => APP_PATH . 'vendor/autoload.php', ~~~ 改为 ~~~ 'composer_aotuload_file' => ROOT_PATH . 'vendor/autoload.php', ~~~ 只有这样,我们才能顺利载入Composer的自动加载器。
';

类库扩展

最后更新于:2022-04-01 11:14:14

# 添加类库 框架本身是不带类库的,如果需要添加第三方类库,可以将类库放置到`application/extend`(可自定义)目录下。 >[info] 在Idea框架中存在3种类库加载方法 >>1. 辅助函数`import()`加载,针对未定义命名空间的类 >>2. 自动加载方式 ,类需要按规则定义命名空间 >>3. Composer加载 ### 1. 加载没有使用命名空间的类库(辅助函数:`import()`) 这儿我们以验证码类为例,来进行演示。 我用来演示的验证码类是自己开发的,包含字体文件和类文件。 类文件路径:`application/extend/lib/vcode/ValidateCode.php` * 首先,我将验证码类库文件放置到`/System/Libraries`,具体目录结构如下: ```tree /application [应用目录] ├─extend--------------------------[应用扩展目录] | └─lib---------------------------[框架类库] | └─vcode-----------------------[分页分页类库] | ├─ValidateCode.php ---------[验证码类] | └─fonts---------------------[字体文件目录] ``` * 文件放置好以后以后,我们进行第二步操作,使用框架内置辅助函数`import();`在控制器User.php`中加载引入刚刚添加的类文件即可: * 公共函数:import();供两个两个参数介绍如下 | 函数名 | 类路径(包含类名。相对于extend目录) | | -- | -- | -- | | import | 传入路径名 | 下面是验证码使用demo: ~~~ <?php namespace app\home\controller; class Index extends Common{ /** * 验证码图片 * @return resource 验证码图片 */ public function vCode(){ session_start(); import('lib/vcode/ValidateCode'); $vCode=new \ValidateCode(); $vCode->getImage(); //设置session $_SESSION['vcode']=$vCode->getCode(); } } ~~~ 现在我们访问URL(这儿演示的是伪静态+PATHINFO模式)路径:`http://ServerNameHome/Index/vCode`即可得到我们的验证码图片输出 ### 2. 命名空间加载方式 类文件路径:`application/extend/lib/vcode/ValidateCode.php` 如果类`ValidateCode`定义了命名空间 ~~~ <?php namespace app\extend\lib\vcode; class ValidateCode { } ~~~ 那么就在这样来使用验证码类 ~~~ <?php namespace app\home\controller; class Index extends Common{ /** * 验证码图片 * @return resource 验证码图片 */ public function vCode(){ session_start(); $vCode=new \app\extend\lib\vcode\ValidateCode(); $vCode->getImage(); //设置session $_SESSION['vcode']=$vCode->getCode(); } } ~~~ * * * * * 如过在配置文件中还自定义了类库命名空间映射,比如这样: ~~~ 'namespace_map_list' => [ 'system' => FRAMEWORK_PATH . 'core', 'app' => ROOT_PATH . 'application', 'lib' => ROOT_PATH.'application/extend/lib', //自定义的目录映射 ], ~~~ 那么类`ValidateCode`的命名空间将这么定义 ~~~ <?php namespace lib\vcode; class ValidateCode { } ~~~ 最后使用验证码类 ~~~ <?php namespace app\home\controller; class Index extends Common{ /** * 验证码图片 * @return resource 验证码图片 */ public function vCode(){ session_start(); $vCode=new \lib\vcode\ValidateCode(); //注意这儿 $vCode->getImage(); //设置session $_SESSION['vcode']=$vCode->getCode(); } } ~~~ ###3.Composer加载在下一章节介绍
';

扩展

最后更新于:2022-04-01 11:14:12

';

404

最后更新于:2022-04-01 11:14:10

## 404页面 当关闭网站错误之后,会默认启用404页面,404模板可以通过这个参数` 'error_template'`指定。 ~~~ /** 'display_errors' => false, * 该项仅在(display_errors = false)条件下有效 * 页面错误模板(404页面) */ 'error_template' => APP_PATH . 'common/404/index.php', ~~~ 我们可以在项目中通过内置辅助函数`notFound()`来调用这个404页面 ~~~ if(...) { } else { notFound(); } ~~~ 附框架内置404模板效果图,不喜欢的可以将模板文件换了。 模板路径`application/common/404` ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a801fee4fd55a0740c1a60af8152f71a_1671x823.png)
';

错误日志

最后更新于:2022-04-01 11:14:08

## 简单的错误日志处理 在Idea框架中,没有内置很强大日志处理工具,只是将PHP错误日志简单的写入到指定的文件中,日志文件路径配置在`application/config/Config.php`下面 ~~~ /** 'display_errors' => false, * 该项仅在(display_errors = false)条件下有效 * php错误写到日志文件 */ 'error_log_file' => APP_PATH . 'log/php.error.log', ~~~
';

错误异常处理

最后更新于:2022-04-01 11:14:05

## 框架内置异常类 在框架中定义了一个异常类`\system\Exception`,由于没有写很复杂的异常处理功能,也没对异常进行分类,只是很简单的写了一个异常信息提示方法`getDetail()`。 代码中演示下在开发中调用这个方法: ~~~ try{ if(...) { //正确代码块 } else { //会出错的 throw new \system\Excepetion('提示信息'); } }catch(\system\Excepetion $e){ $e->getDetail(); } ~~~ `getDetail()`方法返回的界面比较粗糙,不过异常都是给开发人员看的,如果有同学需要比较上档次的异常抛出页面,可以通过Composer安装`filp/whoops`使用,和Thinkphp5的异常差不多效果,但更加酷炫。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0e09631487da67b983c041467523e18b_1919x333.png) ## 关闭错误异常 在网站上线运营之前,我们要避免网站错误信息暴露给网站用户,以保障网站安全。 在Idea框架配置文件中,我们可以对错误异常进行设置为不显示(`false`) ~~~ /** * 错误显示开关 *开发调试阶段设置为true,上线后设为false * true为显示错误 */ 'display_errors' => false, ~~~
';

错误与异常

最后更新于:2022-04-01 11:14:03

';

扩展ORM

最后更新于:2022-04-01 11:14:01

## 添加ORM支持 如果有同学需要使用ORM的方式来操作数据,不习惯原生SQL。那么可以去使用一些第三方数据库框架,比如使用Composer安装Medoo之类的。我这儿就不细讲安装方法了,而且开源的数据库操作类在网上多的数不胜数,大家可以选择自己喜欢的类库进行选择添加。
';

实例化模型

最后更新于:2022-04-01 11:13:59

## Idea模型实例化 无论是数据库对象还是模型对象,Idea都进行了很好的单例化实现。 简要的说实例化模型对象有三种方法,我们推荐使用第二方法: * 第一种方法较为传统,就是简单的new出一个对象 ~~~ <?php namespace app\home\controller; class Index extends Common{ public function userInfo(){ $obj_user = new \app\home\model\User(); $userInfo = $obj_user->userInfo(); } } ~~~ * 第二种方法是使用工厂模式实例化出单例模型,如果需要模型跨模块(平台)调用时,可以这样实例化 ~~~ <?php namespace app\home\controller; class Index extends Common{ public function userInfo(){ $obj_user=\system\Model::getModel('\app\home\model\User'); $userInfo = $obj_user->userInfo(); } } ~~~ >[warning]注意:第一、二种方法支持跨模块调用(特殊需求),第三种不支持 * 第三种方法使用内置的辅助函数`model()`,主要是对第二种方法的函数封装,但不支持跨模型。可以进行模型单例化 共方法辅助函数`model()`有两个参数,直接在控制器类里面调用就行 | model方法参数 | 值 | 属性 | | -- | -- | -- | | 参数1 | 模型名 | 必要 | | 参数2 | 模型方法名 | 可选(当调用的方法有参数时不使用) | 如果只设置了第一参数,实例化模型代码如下 ``` <?php namespace app\home\controller; class Index extends Common{ public function User(){ $objUser=model('User'); $userInfo=$objUser->userInfo(); } } ``` 如果设置了第二个参数,上面的代码等效于 ``` <?php namespace app\home\controller; class Inde extends Common{ public function userInfo(){ //实例化并调用模型操作 $user_info=model('User','userInfo'); } } ``` >[danger]注意:但如果调用的模型方法需要传参,则不要使用第二参数
';

PDO对象

最后更新于:2022-04-01 11:13:56

### PDO对象获取 在框架中,提供了一个PDO对象,我们在`Config.php`中配置好数据库的dns信息之后,即可在模型类中进行数据库操作。 数据库PDO对象: **`self::$db`** ~~~ <?php class User extends Model{ //注册用户 public function addUser($admin_name='',$admin_password='',$admin_mail=''){ $sql="INSERT INTO `admin` (`admin_name`,`admin_password`,`admin_email`) VALUES ('$admin_name','$admin_password','$admin_mail')"; $result=self::$db->exec($sql); return $result; } } ~~~ >[success] ### 多数据库支持 可通过 `self::connect('dsn键值')` 来进行数据库切换。 同学们可以通过下面的的代码来帮助理解 ~~~ <?php class User extends Model{ //注册用户 public function addUser(){ var_dump(self::$db); //默认DSN键的PDO对象 self::connect('mssql'); var_dump(self::$db); //一个新的PDO对象,dns为mssql } } ~~~ >[warning]当子模型写了构造方法的时候,需要在构造方法中重载父类,同时也可以在子类的构造方法中切换所要连接的数据库,这样所有子类方法都是使用的该数据库 ~~~ public function __construct() { parent::__construct(); self::connect('mysql_slave1'); } ~~~
';

数据库连接

最后更新于:2022-04-01 11:13:54

### 怎么连接数据库 >PHP7中,已完全废除mysql扩展连接数据库,所以Idea框架完全基于PDO,请先开启PHP的PDO扩展,再进行使用 数据库连接信息在`Config.php`文件中,我们只需简单配置即快速连接数据库 数据库信息配置代码如下: ~~~ return[ /** * 设置默认dsn,必须在dsn列表中存在 * */ 'default_dsn' => 'master', /** * dsn列表 * 更多dsn设置可以参考PHP官方手册 */ 'dsn' => [ 'master' => [ 'mysql:127.0.0.1;port=3306;dbname=mydb', 'root', '123456', [ //array $driver_options PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES "utf8"', PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_PERSISTENT => false, //更多驱动选项请参考PHP手册 ] ], 'mysql_slave1' => [ 'mysql:host=localhost;port=3306;dbname=test', 'root', '123456', [ //array $driver_options PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES "utf8"', PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ], ], ]; ~~~
';

模型

最后更新于:2022-04-01 11:13:52

### 模型 * 数据操作完全基于PDO * 多数据库支持 * 数据库及模型实现对象单例化
';