# student
**Repository Path**: freekan/student
## Basic Information
- **Project Name**: student
- **Description**: No description available
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-06-20
- **Last Updated**: 2024-12-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
构建属于自己的php框架
=======================
目的
---
* 熟悉什么是框架
* 熟悉框架的核心运行原理
* 熟悉与掌握框架的使用
要求
---
* 框架的运行原理以及全部流程
* 每一行代码需要加上注释
* 不要求默打,这个难度比较大,尽量做到
需要使用的知识点
--------------
* php
* mysql
* composer
* git简单知识
-------------------
安装composer
实现步骤
-------
###1.本地创建框架的目录,使用`composer init` 初始化项目
```
composer init初始化之后会自动声场vendor目录以及composer.json文件
composer dump
```
###2.构建框架文件以及目录(目录名全部小写规范)
```
|--app(开发者写代码的地方)
| |--home(前台模块)
| | |--controller(控制器类)
| | |--view(视图)
|--houdun(系统核心)
| |--core
| |--model
| |--view
|--public(入口、静态资源)
| |--static(静态资源)
| |--view(公共模板文件)
|--system(配置)
| |--config (配置项)
| |--model (处理业务的各种模型类)
```
```
MVC
M---model
V--view
C--controller
```
###3.创建框架的启动类houdunwang\core\Boot.php类`类名首字母大写,文件名小写`
```
pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();
}
public static function init()
{
session_id () || session_start ();
date_default_timezone_set ('PRC');
}
public static function appRun ()
{
if ( isset( $_GET[ 's' ] ) ) {
$info = explode ('/',$_GET['s']);
$info[1] = ucfirst ($info[1]);
$class = "\app\\{$info[0]}\controller\\{$info[1]}";
$action = $info[2];
define ('MODULE',strtolower ($info[0]));
define ('CONTROLLER',lcfirst ($info[1]));
define ('ACTION',$info[2]);
} else {
$class = "\app\home\controller\Entry";
$action = "index";
define ('MODULE','home');
define ('CONTROLLER','entry');
define ('ACTION',$action);
}
echo call_user_func_array ( [ new $class , $action ] , [] );
exit;
}
}
```
###4.在public目录中创建index.php单一入口文件
```
继续往下解决这个问题
###6.配置composer配置文件
修改composer.json文件。注意`autoload`该项需自己增加
```
{
"name": "chaorenwubin/frame",
"description": "后盾网php框架系统",
"type": "project",
"licence":"MIT",
"authors": [
{
"name": "武斌",
"email": "wubin.mail@foxmail.com"
}
],
"minimum-stability": "dev",
"require": {},
"autoload":{
"files":[],
"psr-4":{
"houdunwang\\":"houdunwang\\",
"app\\":"app\\"
}
}
}
```
PSR-4
```
1.是制定的代码规范,简称PSR,是代码开发的事实标准
2.PSR-4使代码更加规范,能够满足面向package的自动加载,它规范了如何从文件路径自动加载类,同时规范了自动加载文件的位置
3.如果是: "houdunwang\\":"houdunwang/",当实例化\houdunwang\core\Boot类时,会加载houdunwang/core/Boot.php
4.如果是: "houdunwang\\":"hdphp/",当实例化\houdunwang\core\Boot类时,hdphp/core/Boot.php
5.如果是: "houdunwang\\":"",当实例化\houdunwang\core\Boot类时,Boot.php
5.反斜线是转义
```
生成composer自动载入文件,在Terminal中进入项目跟目录执行:
```
composer dump
```
这时,访问项目入口public文件输出`run`
###7.Boot.php中书写appRun方法:
引入助手函数
```
1.将以前我们写的helper.php文件放入system/helper.php
2.修改composer.json文件中autoload项的files
"autoload":{
"files":[
"system/helper.php"
],
"psr-4":{
"houdunwang\\":"houdunwang\\",
"app\\":"app\\"
}
}
3.在Teminal终端执行composer dump
```
appRun方法具体代码
```
public static function appRun ()
{
}
```
###8.测试访问app中我们构建的程序
在app/home/controller中创建Entry.php
```
也可通过尝试其他地址访问,如:`public/index.php?s=home/entry/store`
浏览器正常输出`Welcome`
###9.构建控制器层 C
public/view放入message.php模板文件
```
自己参考代码
```
在 core 目录中创建Controller.php,并让app\home\controller\Entry.php及以后类继承Controller
```
通过地址栏访问store方法:`public/index.php?s=home/entry/store`
可看到提示页面,3秒之后自动跳转
```
setRedirect ('?s=home/entry/index')->message ('添加成功');
}
}
```
###10.构建视图层 V
在core/view目录中建立View.php和Base.php
View.php
```
file = "../app/" . MODULE . '/view/' . CONTROLLER . '/' . ACTION . '.php';
return $this;
}
public function with ( $var )
{
$this->data = $var;
return $this;
}
//当输出对象的时候出发,比如说echo $obj->make();
public function __toString ()
{
// TODO: Implement __toString() method.
extract ($this->data);
include $this->file;
return '';
}
}
```
###11构建模型层和数据库ORM数据对象关系映射
数据库配置项文件`system/config/database.php`
```
'mysql',
'host' => '127.0.0.1',
'user' => 'root',
'password' => 'root',
'dbname' => '',
];
```
system/helper.php助手函数中增加加载配置项的c函数
```
function c ( $path )
{
}
```
`houdunwang/model/Model.php`
```
connect ();
//$class打印结果:system\model\Article
$class = explode ( '\\' , $class );
$this->table = strtolower ( $class[ 2 ] );
}
private function connect ()
{
}
/**
* 执行有结果集的查询
*
* @param $sql 查询的sql语句
*
* @return mixed 查询结果结
*/
public function query ( $sql )
{
}
public function exec ( $sql )
{
}
}
```
需要在system/model建立Article.php进行协助测试测试,Article.php名字不是固定的
```
选择第一个:filp/whoops
进入到项目根目录执行:
```
composer require filp/whoops
```
在houdunwang/core/Boot.php中加入
```
$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();
```