代码目录结构
web/www/index.php 绑定域名www.domain.com 首页入口 单一入口.
web/upload/ 绑定域名 img.domain.com 用于上传文件图片等.
web/static/ 绑定域名 static.domain.com 用于静态文件 js,css,图片
include/config/ 基本配置
include/base/ 基本函数,框架内核.
src
src/controller
src/model/
src/service/
src/template/
src/extend/payment/各种支付类
src/extend/oauth各种第三方登录类
src/extend/util/一些工具类
rewrite 把所有不存在的路径重定向到index.php
访问www.domain.com 默认指向 index控制器的,index方法.
访问 www.domain.com/user/login/ 指向user控制器的login方法
定义好各个目录的路径.用常理定义,变量定义都行.
自动加载
不用include s,m,c等层文件,全部自动加载,效率没问题 根据后缀名截取,判断. 例如首页控制器命名:IndexController.php,如果截取后十位==Controller,就知道这是一个控制器文件,然后根据类名,直接引入文件了. 可以参考thinkphp的autoload机制
msvc架构
m model 数据模型,目前就理解为写数据库增删改查
v view 模板
c controller 控制器
s service 服务层
c 调用 s ,v ,不能直接调用m. 因为m就是直接读写数据库,然而s 根据需要 会把数据缓存到memcache等地方
s 调用 m
m 写数据库查询方法
前后台共用service.也可分别定义前台的和后台的service
这个框架参考了tp和以前公司的框架的优点,去掉不好的地方; tp用了一堆a ,b,c,d函数很不爽.一个笑话就是tp再更新就26个字母都用光了.没有可用的函数了.哈哈哈 tp是好用,但是不如ci更面向对象.
首页controller代码
class IndexController extends MainController
{
public function index(){
//$this->xxx 这样就可以定义模板中用到的变量.
$this->newsTypes = NewsSvc::newsTypes();
$this->news = NewsSvc::newsList();
$this->display('index.index');//不省略参数,灵活配置.
}
}
新闻的service服务类 NewsSvc.php
class NewsSvc
{
public static function newsTypes(){
$array = array(1=>'新闻',2=>'公告');
return $array;
}
public static function newsList(){
$key = 'news';
$news = CacheSvc::get($key);
if($news){
return $news;
}else{
$news = NewsModel::select();
CacheSvc::set($key,$news,60);//缓存一分钟
return $new;
}
}
}
不要滥用静态方法,有弊端,既然一直谈面向对象,还是尽量用new出对象来用.
看了一些国外的对接sdk, 用到了很多对象,特别麻烦,其中各种对象特别多,
有好处 也有麻烦的地方.各有利弊
不像国内一些代码 array数组走天下
首页模板
原生php, if(): endif; 这种语法好多人没写过吧,手册一开始就有介绍.这样很美观
<?=$xxx?> 相当于<?php echo $xxx;?> 这是php支持的简写方式
此模板不用编译,不用记忆复杂的模板语法.smarty的一个用途是给美工用,实现分工,但是还是基本还都是php程序员套模板,何必弄一套复杂的模板语法呢.还不如用原生php实现
模板代码: 先引入头尾,大家经常这样写吧.中间就简单的写一个新闻列表展示
<?php include TPL_PATH.'inc.header.php'?>
<div id="news_list">
<ul>
<?php if($news):?>
<?php foreach($news as $row):?>
<li><a target="_blank" href="news/<?=$row['id']?>">[<?=$newsTypes[$row['classid']]?>] <?=$row['title']?></a></li>
<?php endforeach;?>
<?php endif;?>
</ul>
<!--实现 <li><a href="news/1">[新闻分类]新闻标题</a></li> -->
</div>
<?php include TPL_PATH.'inc.footer.php'?>