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中session变量的销毁
Feb 27 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
May 29 PHP
php文件上传简单实现方法
Jan 24 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
Oct 29 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
php-beanstalkd消息队列类实例分享
Jul 19 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
Laravel如何实现自动加载类
Oct 14 PHP
php将字符串转换为数组实例讲解
May 05 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写的MySQL数据库用户认证系统代码
2007/03/22 PHP
php FPDF类库应用实现代码
2009/03/20 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python suds访问webservice服务实现
2020/06/26 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
时尚圣经:The Fashion Bible
2019/03/03 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
教研活动总结
2014/04/28 职场文书
材料物理专业求职信
2014/09/01 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
学习十八大的感悟
2015/08/11 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
MySQL详细讲解变量variables的用法
2022/06/21 MySQL