用composer搭建php框架(三)--MVC之控制器
来源:互联网 发布:网站幻灯片js代码 编辑:程序博客网 时间:2024/06/06 01:12
本教程示例代码见 github:https://github.com/xdlmr/myframe
前言
上一篇中我们已经使用klein构建了一个简单的路由,当我们路由跑起来时候,我们的工作就简单多了,接下来将会设计一个mvc框架,使得更丰满、有活力!
MVC
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
- Model(模型)表示应用程序核心(比如数据库记录列表)。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
(来自百度百科);
配置文件
我们先建一个配置文件,常用变量都在里面哦!
新建文件夹phpframe/config,添加文件config.php:
<?phpdefine("DEBUG", true);//调试模式// 数据库地址define('DRIVER', 'pgsql');define('DB_TYPE', 'pgsql');define('DB_IP', '127.0.0.1');define('DB_PORT', '5432');define('DB_USERNAME', 'postgres');define('DB_PASSWORD', '123456');define('DB_NAME', 'phpframe');//views 层目录define('PRODUCT_TEMPLATE_DIR', WEB_ROOT . "/" . 'views');//相应状态define('CODE_SUCCESS', 200);define('CODE_ERROR', 300);
这里我已经预先定义一些后期需要用到的变量
在index.php合适位置添加代码:
require_once WEB_ROOT . '/config/config.php';//配置文件//开启调试if(DEBUG) { ini_set('display_errors', 'On');} else { ini_set('display_errors', 'Off');}
加载指定类型的类程序
这标题有点绕,解释下:就是按需加载我们需要引入的类文件,比如加载控制器的controller文件以及模型的model文件。
新建文件phpframe/common/box.php:
<?php/** * 加载指定类型的类程序 **/class Box { public static $_modelObjArr; public static function getObject($_appName, $_typeStr = 'controller', $product = '') { // var_dump($_typeStr.'----'); // $_typeStr = ( $_typeStr === '' )?'controller':$_typeStr; $_appName = strtolower($_appName); $_typeStr = strtolower($_typeStr); $className = $_appName . ucfirst($_typeStr); if(isset(self ::$_modelObjArr[$className]) && is_object(self ::$_modelObjArr[$className])) { return self ::$_modelObjArr[$className]; } $appdir = ( $product === '' ) ? PRODUCT : $product; $file = WEB_ROOT . "/app/${_typeStr}/" . $appdir . "/${_appName}.${_typeStr}.php"; if(file_exists($file)) { include_once $file; // var_dump($file); if(class_exists($className)) { return self ::_createObject($className); } } return null; } public static function controller($appname, $product) { return self ::getObject($appname, 'controller', $product); } public static function model($appname, $product) { return self ::getObject($appname, 'model', $product); } public static function _createObject($_className) { // var_dump($_className); if(isset(self ::$_modelObjArr[$_className]) && is_object(self ::$_modelObjArr[$_className])) { return self ::$_modelObjArr[$_className]; } else { self ::$_modelObjArr[$_className] = new $_className(); // var_dump(self::$_modelObjArr); return self ::$_modelObjArr[$_className]; } } //错误提示 public static function _showErr($_errTypeStr = '') { echo $_errTypeStr; exit; //errorlog($_errTypeStr); }}//end class?>
在composer.json 加入autoload,如下图:
执行composer dump-autoload自动加载box.php。
添加控制器
添加控制器
新建 phpframe/app 文件夹,在 app 中创建 controller、model、views 三个文件夹,controller下新建index.controller.php:
<?php class IndexController extends Controller { public function render() { echo "<h1>控制器成功</h1>"; } public function dologin($req){ return ['code' => CODE_SUCCESS, 'msg' => "方法路由成功"]; } }
controller下新建controller.php:
<?php class Controller { }
composer.json加入:”app/controller/controller.php” 。
刷新页面,看到:
- 用composer搭建php框架(三)--MVC之控制器
- 用composer搭建php框架(四)--MVC之视图
- 用composer搭建php框架(五)--MVC之模型
- 用composer搭建php框架(一)--安装composer
- 用Composer搭建PHP框架(一)
- 用Composer搭建PHP框架(二)
- php搭建mvc框架四(加载控制器)
- 用composer搭建php框架(二)--搭建路由
- 利用 Composer 一步一步构建自己的 PHP 框架(三)——设计 MVC
- PHP搭建自己的MVC框架6 控制器
- php搭建mvc框架三(路由类)
- 用composer 快速打造自己的PHP MVC框架
- MVC框架之composer加载(一)
- MVC框架之composer加载(二)
- 搭建一个spring mvc框架(三)
- ASP.NET MVC框架之控制器Controller(四)
- 贯彻PHP中的MVC之控制器篇
- MVC框架自己封装开启超神之路(上) 3-3composer加载
- [SMOJ1868]bst计数
- antd修改默认样式
- Python(io)读取文件
- DAY61 jQuery基础2
- 【二叉搜索树】二叉搜索树的实现
- 用composer搭建php框架(三)--MVC之控制器
- 序列化二叉树
- vue2.0中写一个能在外面访问的全局函数
- codeforces314D 二分+滑窗
- ip
- 使用RxJava实现PullScrollView,PullListView, PullGridView 等进入自动下拉刷新
- hdu6125-(状态压缩+分组背包)
- 各种压缩格式比较
- memcached完全剖析–1. memcached的基础