zan 简介

[zan 赞] 是一个免费开源的,快速,简单的面向对象的,轻量级PHP微框架。

之所以开发这个框架,不是因为它的性能比Yaf好,也不是因为比ci,tp功能强大,仅仅是因为我想练习设计,它只是一个产出,如果你也喜欢它的设计,或者有优雅的方式,那就一起构建吧。

我对zan的期望是:它是一个只包含了路由分发,尽可能少的基础库。始终相信在一个轻快的平台上,总能为有想法的技术人提供更多的可能和精彩。

能做什么?

controller,model,view

基础工具log,session,http,requst

composer

基本要求

PHP5.3+

composer(如需要引用其它packagist时)

zan 实例

zan 简明教程

使用zan是一件很轻松的事情,它体贴地根据uri(/app/controller/action?)转发到相应的app的controller::action中。你的开发只需要从控制器开始,剩下的交给你了,精彩看你如何自由发挥。

此例会展示在清晰的结构中,使用简单的基础库简洁优雅地实现app,相信你只需要花上5分钟了解这些东西,就能完全得掌握zan。

路由分发

当发起请求如:http://great-compayn/demo/user/login?username=zan&pass=superzan,先配置一项nginx的rewrite规则:

location / {

try_files $uri $uri/ /index.php$is_args$args;

}

此时zan会找到App/Demo/Controller/User.php类,自动加载所需类和配置,并调用loginAction的方法。

App

└── Demo

├── Conf

│ └── User.php

├── Controller

│ └── User.php

├── Model

│ └── User.php

└── Template

├── signup.php

└── userinfo.php

zan把这部分工作交由Zan\Library\Bootstrap去处理,在找寻User.php和确认是否存在loginAction的方法过程,如有其一不存在,则返回404;如在执行过程有自定义错误或异常,将返回50x系统错误。

App 开发

由开发过程中存在多app,如openapi(开放接口),mis(运营后台),help(反馈平台)。明显的好处在于uri更符合RESTful设计,组织结构也更清晰明了。暂且我们定义一个Demo吧

Controller

实际上,编写应用的过程就是不断的添加Controller和Action并把它实现。

下边是一个Controller User的样子:

use Zan\Library\Util;

use Zan\Library\Controller;

use Zan\Library\View;

class Demo_Controller_User extends Controller {

public function __construct() {

$this->view = new View();

$this->model = new Demo_Model_User();

}

public function loginAction() {

if (Util\Request::isPost()) {

$userName = Util\Request::post('user_name');

$userPass = Util\Request::post('user_pass');

$ret = $this->model->login($userName, $userPass);

if ($ret) {

Util\Http::redirect('/demo/user/info');

} else {

$this->view->set('error_msg', '登录失败,请检查用户名和密码');

}

}

$this->view->render(array(

'action' => '/demo/user/login',

'tip' => '登录'

), 'signup.php');

}

}

在User中,使用了两种自动加载方式,一种是命名空间,另一种是下划线,前者是全局的,后者是在App工作空间内实现快速自动加载(另外个人审美原因)。

Model

Demo_Model_User会自动加载App/Demo/Model/User.php,

use Zan\Library\Util;

use Zan\Library\Model;

class Demo_Model_User extends Model {

public function __construct() {

parent::__construct('mysqli');

}

public function login($userName, $userPass) {

if (!$userName || !$userPass) {

return false;

}

$userPass = $this->getMd5Pass($userPass);

$sql = "select * from user where name = '{$userName}' and pass = '{$userPass}'";

return $this->db->fetchOne($sql);

}

}

view

模板渲染目前实现非常简单,100%原生,没有做任何正则替换。模板赋值有两种方式,$this->view->set('error_msg', '登录失败,请检查用户名和密码');;另外一种就是在最后渲染模板$this->view->render($array, $tpl)统一赋值。$tpl模板在当前App目前下Template下,即Demo/Template/signup.php

渲染方式:

Zan\Library\View;

...

public function render($array = [], $tpl = null) {

if (is_array($array) && $tpl) {

$this->_tpl = APPPATH . APP . '/Template/' . $tpl;

}

$this->mset($array);

if (!file_exists($this->_tpl)) {

throw new \ZException("can not find tpl[{$this->_tpl}]", E_ERROR);

}

ob_start();

extract($this->_extract);

include($this->_tpl);

ob_flush();

}

...

可以看到,render接受一个$array数组,然后将数组中的数据extract出来,这样一个原本是$array['tip']的数据在模板里边就能通过$tip访问了。而载入模板部分更简单,只是直接require。这是因为zan直接使用PHP来做模板的解释引擎。Template模板signup.php输出如下

= $error_msg ?>

基础库

一直在想哪些是web开发最常用的基础库,如何构建优雅的组件,以下是个开始,力争简单够用,让喜欢它的开发者能快速上手,同时让自己能这些组件优雅地开发复杂的应用。

日志

分模块、分级别

配置简单(目前0配置)

日志格式清晰易读

应用简单

http

request

session

image

最流行的轻量级php框架,GitHub - meolu/zan: zan 轻量级PHP微框架相关推荐

  1. php 框架搭建,利用composer搭建一个PHP微框架(API微项目)

    为什么搭建一个框架(搭建一个怎样的框架) 通过搭建一个框架更好的学习PHP 搭建一个专门用于构建API的微型框架. 微型框架基本上是一个封装的路由,用来转发HTTP请求至一个闭包,控制器,或方法等等, ...

  2. php微框架 flight源码阅读

    Flight(https://github.com/mikecao/fl... 是一个可扩展的PHP微框架,快速.简单,能够快速轻松地构建RESTful web应用程序,在github上有2k sta ...

  3. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

    20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...

  4. 【github干货】主流深度学习开源框架从入门到熟练

    文章首发于微信公众号<有三AI> [github干货]主流深度学习开源框架从入门到熟练 今天送上有三AI学院第一个github项目 01项目背景 目前深度学习框架呈百家争鸣之态势,光是为人 ...

  5. 【项目学习总结】GitHub : miloyip/json-tutorial(轻量级JSON)

    GitHub : miloyip/json-tutorial(轻量级JSON) 一.项目介绍 二.知识点总结 1. 项目中的命名格式: 1.1 xxx.h文件中的#ifndef (tutorial01 ...

  6. 友盟小米收不到推送消息_一个轻量级、可插拔的Android消息推送框架。一键集成推送(极光推送、友盟推送、华为、小米推送等)...

    XPush 一个轻量级.可插拔的Android消息推送框架.一键集成推送(极光推送.友盟推送.华为.小米推送等),提供有效的保活机制,支持推送的拓展,充分解耦推送和业务逻辑,解放你的双手! 在提iss ...

  7. php 后端 轻量 框架,GitHub - 22cloud/mixphp: 轻量 PHP 框架,基于 Swoole 的常驻内存型 PHP 高性能框架 (开发文档完善)...

    高性能 • 轻量级 • 命令行 MixPHP 是什么 MixPHP 秉承 "普及 PHP 常驻内存型解决方案,促进 PHP 往更后端发展" 的理念而创造,采用 Swoole 扩展作 ...

  8. PodfileKit将github上常见的iOS(Swift)第三方框架进行了汇总,并且将框架进行了分类,为用户管理第三方框架提供了方便。

    PodfileKit ======================== Easy Podfile ! PodfileKit将github上常见的iOS(Swift)第三方框架进行了汇总,并且将框架进行 ...

  9. javascript框架库_2019年使用的最佳JavaScript框架,库和工具

    javascript框架库 似乎有比开发人员更多JavaScript框架,库和工具. 在2018年底, 在GitHub上的快速搜索显示230万个JavaScript项目. npm已成为全球最大的模块系 ...

最新文章

  1. X64 Linux 无法从本地字符界面登陆。
  2. 【数据库】oracle数据库----内嵌视图
  3. arrays.sort(._Arrays.hashCode(Object [])与Objects.hash(Object…)
  4. Maven的pom.xml文件结构之Build配置build
  5. 远程linux服务器,安装集成的xampp,本地电脑远程连接数据库进行使用
  6. 天津理工大学c语言上机题库,天津理工大学C语言上机报告题目加答案.doc
  7. 【Elasticsearch】Elasticsearch 热点线程 hot_threads
  8. PHP面试之网络协议面试题
  9. Linux_USB2I2C驱动安装(以CH341驱动安装为例)
  10. 计算机mac地址设置路由器,路由器设置:如何查看电脑/手机的MAC地址?
  11. 【TJOI 2019】唱、跳、rap和篮球
  12. CentOS8配置yum/dnf镜像源
  13. Excise1_Exception
  14. 怎样和控制欲很强的家人相处-不受他人影响
  15. 临床执业助理医师(综合练习)题库【5】
  16. 学以致用——Java源码——员工薪酬系统功能增强(Payroll System Modification)
  17. iOS开发三方资源 - 欲先攻其事必先利其器
  18. python 下的 word2vec 学习笔记
  19. canon老的一体机在win10上无法直接安装成功
  20. Intellij IDEA——启动Tomcat控制台输出繁体乱码

热门文章

  1. 【重点】剑指offer——面试题62:序列化二叉树
  2. 剑指offer——面试题8:旋转数组的最小数字
  3. Leetcode 814.二叉树剪枝
  4. Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7005 ..
  5. Python3.6 所有内置函数
  6. [译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)
  7. fzu2202 犯罪嫌疑人
  8. 报表性能优化方案之善用参数注入
  9. sql把字符数组转换成表
  10. C++ 类的前向声明