# 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(); ```