分页类
最后更新于: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
* 多数据库支持
* 数据库及模型实现对象单例化