php skymvc 一款轻量、简单的php


Posted in PHP onJune 28, 2011

改框架主要用于实现多个程序员之间的协同开发以及mvc开发模式的实现.skymvc采用mvc开发方式,框架本身易扩展。skymvc作为天网计划的基础框架,秉承易用、易学、共同开发的优良传统,我们致力于打造一款优秀的php
mvc框架。欢迎大家多多提些建议。
1.创建配置文件skyMVC支持自动创建网站目录:输入http://locahost/skymvc/install.php 即可自动创建
文件目录。如果创建之后想重新创建,删除install.lock文件及可。
推荐自动创建。
也可以手动创建:目录都可以自定义
自定义目录时需要对程序进行相应的配置
admin 后台目录
admin/model
admin/ctrl
attach
上传的附件目录
ctrl 控制文件目录
data 目录
data/config.php
配置文件
data/cache 缓存目录
data/cache/css
css缓存
data/cache/file文件缓存
data/cache/tpl 模板缓存
data/cache/js
js缓存
model 模型文件目录
tpl 模板目录
tpl/admin 后台模板
tpl/default
默认模板
js目录
plugin 插件目录
admin.php 后台入口文件
index.php 前台入口文件
2.入口文件

skymvc采用单一入口模式,但不是唯一入口,推荐使用两个入口。一个是前台入口,一个是后台入口。
1.前台入口文件实例:index.php 文件名可以自定义 推荐 index 或者
default

<?php 
require 
"data/config.php";//加载配置文件 
require("skymvc/skymvc.php");//引用框架文件 
//判断控制器是否合法 
$_GET['m']=isset($_GET['m']) 
&& 
in_array($_GET['m'],array('index'))?$_GET['m']:'index'; 
//判断结束 
require_once(CTRL_DIR."/{$_GET['m']}.ctrl.php"); 
$classname 
= $_GET['m'].'Control'; 
$control = new 
$classname(); 
//配置伪静态的 
$control->tpl->rewrite=false; 
$control->tpl->rewrite_rule=array(array("/index.php/i"),array("index.html")); 
//配置伪静态结束 
$method=isset($_GET['a']) 
&& method_exists($control,'on'.$_GET['a'])? 
'on'.$_GET['a']:"onDefault"; 
$control->$method(); 
?>

2.后台入口文件:admin.php 文件名可自定义
<?php 
require 
"data/config.php"; 
require("skymvc/skymvc.php"); 
$_GET['m']=isset($_GET['m']) 
&& 
in_array($_GET['m'],array('index','article'))?$_GET['m']:'index'; 
require_once(ADMIN_DIR."/".CTRL_DIR."/{$_GET['m']}.ctrl.php"); 
$classname 
= $_GET['m'].'Control'; 
$control = new 
$classname(); 
//配置伪静态的 
$control->tpl->tplid="admin"; 
$control->tpl->currdir="admin"; 
$control->tpl->rewrite_on=true; 
$control->tpl->rewrite_rule=array(array("/index.php/","index.html")); 
$method=isset($_GET['a']) 
&& method_exists($control,'on'.$_GET['a'])? 
'on'.$_GET['a']:"onDefault"; 
$control->$method() 
?>

说明:前后台入口文件的差别不大,主要在于 模型 和 控制文件 所在文件夹。
3.控制器文件
<?php 
class indexControl extends skymvc 
{ 
function 
__construct() 
{ 
$this->indexControl(); 
} function 
indexControl() 
{ 
parent::__construct();//父类初始化 
$this->loadModel("index"); 
//后台 
//$this->loadAdminModel("index"); 
} 
function 
onDefault() 
{ 
$this->tpl->assign("welcome","欢迎使用skymvc,让我们共同努力!"); 
$this->tpl->assign("who",$_ENV['indexModel']->test()); 
//后台 
//$this->tpl->assign("who",$_ENV['admin_indexModel']->test()); 
$this->tpl->display("index"); 
} 
?>

4.模型文件
模型文件主要用于处理数据,当然也可以处理其他的逻辑,但不推荐。文件命名规范:类.model.php
如:index.model.php.
模型文件位于模型目录下面:如model目录
例:index.model.php
<?php 
class 
indexModel 
{ 
public $base; 
function 
__construct(&$base) 
{ 
$this->indexModel($base); 
} 
function 
indexModel(&$base) 
{ 
$this->base=$base; 
$this->db=$base->db; 
} 
function 
test() 
{ 
echo "这是模型测试"; 
} } 
?>

模型文件:前后台一样 就存储的地方不一样
5.hello world
kymvc框架的hello word !
如果是自动创建目录的话。
配置好数据库
index.php
入口文件写好。
index.php内容
<?php 
require 
"data/config.php";//加载配置文件 
require("skymvc/skymvc.php");//引用框架文件 
//判断控制器是否合法 
$_GET['m']=isset($_GET['m']) 
&& 
in_array($_GET['m'],array('index','article'))?$_GET['m']:'index';//将所有在index.php入口出现的模块都放入array()里 
//判断结束 
require_once(CTRL_DIR."/{$_GET['m']}.ctrl.php"); 
$classname 
= $_GET['m'].'Control'; 
$control = new 
$classname(); 
$method=isset($_GET['a']) && 
method_exists($control,'on'.$_GET['a'])? 
'on'.$_GET['a']:"onDefault"; 
$control->$method();?>

在ctrl目录下 创建
hello.ctrl.php 文件
<?php//hellControl 类得命名规范 类名Control 
class 
helloControl extends skymvc 
{ function __construct() 
{ 
$this->helloControl(); 
} 
function 
helloControl() 
{ 
parent::__construct(); 
$this->loadModel("hello");//载入模型 
可以载入任何模型 但不能是相同类的模型 
} 
//默认执行的动作 命名规范 on函数名 
function 
onDefault() 
{ 
echo "hello world 
"; $this->smarty->display("hello.html"); 
} 
//当m=hello, a=test 
执行下面的函数 
function 
onTest(){ 
$this->tpl->assign("test",$_ENV['helloModel']->gettest()); 
$this->tpl->display("hello.html"); 
} 
}?>

在model目录下
创建hello.model.php
<?php 
class helloModel 
{ 
public 
$base; 
function 
__construct(&$base) 
{ 
$this->helloModel($base); 
} function 
helloModel(&$base) 
{ 
$this->base=$base; 
$this->db=$base->$db; 
} 
//上面都是不用改的 
function gettest(){ 
return $this->db->getRow("select * from test 
limit 1");//读取数据 
} 
} 
?>

在tpl目录下 新建 hello.html
<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" 
content="text/html; charset=gb2312" 
/> 
<title>无标题文档</title> 
</head> 
<body> 
这是第一个例子:Hello World ! 
这是测试的例子:{loop $test $t} {$t} 
{/loop} 
</body> 
</html>

skymvc 下载地址
PHP 相关文章推荐
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
php header Content-Type类型小结
Jul 03 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
header导出Excel应用示例
Jan 24 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
Dec 14 PHP
php 防止表单重复提交两种实现方法
Nov 03 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
详解php中curl返回false的解决办法
Mar 18 PHP
关于php mvc开发模式的感想
Jun 28 #PHP
yii框架源码分析之创建controller代码
Jun 28 #PHP
关于PHP中Object对象的笔记分享
Jun 28 #PHP
php dirname(__FILE__) 获取当前文件的绝对路径
Jun 28 #PHP
php新建文件自动编号的思路与实现
Jun 27 #PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 #PHP
php开启安全模式后禁用的函数集合
Jun 26 #PHP
You might like
PHP缓存技术的使用说明
2011/08/06 PHP
php时区转换转换函数
2014/01/07 PHP
web前端开发也需要日志
2010/12/09 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
ionic组件ion-tabs选项卡切换效果实例
2016/08/27 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
Python变量赋值的秘密分享
2018/04/03 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
毕业生的自我评价分享
2013/12/18 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL