简单快速的开发WEB应用, PHP 框架 Lemon 介绍
喜欢(❤ ω ❤) laravel 但是它太笨重了
想快速简洁的开发小项目,试一试Lemon 吧。
Lemon 是一个现代的 PHP 框架,采用 composer 管理组件依赖。
如何使用 Lemon
安装
前面已经说过 Lemon 采用 composer 加载。
第一步,使用 composer 安装
mkdir lemoncd lemoncomposer require chanywn/lemon
第二步,新建 index.php 文件
require 'vendor/autoload.php';use Lemon\Route;Route::get('/', function($request, $response){return $response->write('Hello lemon');
});Route::run();
第三步,执行内置服务器
php -S localhost:4000
接下来,打开浏览器,访问 http://localhost:4000
Lemon 的功能
路由
在 Lemon 中的路由是通过匹配的URL模式与回调函数。
Route::get('/', function($request, $response) {echo 'index';
});
当然也可以这样表示
Route::get('/', 'hello');function hello($request, $response){echo 'index';
}
请求方式
Route 是路由模块的静态类,您可以通过执行route类的各种静态方法来响应特定方法。
Route::get('/method/1', function($request, $response) {echo '我收到了一个 GET 请求';
});Route::post('/method/2', function($request, $response) {echo '我收到了一个 POST 请求';
});Route::put('/method/3', function($request, $response) {echo '我收到了一个 GET 请求';
});Route::delete('/method/4', function($request, $response) {echo '我收到了一个 POST 请求';
});Route::any('/method/5', function($request, $response) {echo sprintf('我收到了一个 %s 请求', $request->method);
});
哈哈,可以愉快的开发 restful api 了。
你可能已经注意到了回调函数中的 $request
和 $response
,这两个参数,这两个参数是Request
和Response
类的实例,是回调函数的必须参数。这两个参数很有用,之后会介绍。
通配符路由
route::get('/hello/(:any)', function($request, $response, $name) {echo 'hello ' . $name;
});
该方法第一个参数是要匹配的路由URL,其中(:any)
通配符用来匹配任意值。在回调函数中我们使用了$name
参数来接收这个值。
上面典型的路由匹配的是一个,匹配多个值的时候,回调函数中的参数位置对应匹配的值,参数名自定
。
route::get('/(:num)/(:num)/(:num)', function($request, $response, $year, $month, $day) {echo $year . '/' . $month . '/' . $day;
});
(:num)
匹配只含有数字的一段。 (:any)
匹配含有任意字符的一段。
Request(请求)
得到当前请求的路径、方法、ip
route::get('/', function($request, $response) {echo $request->path .'<br>';echo $request->method .'<br>';echo $request->ip .'<br>';
});
接受get参数
localhost:3000/home?name=razor&age=0
route::get('/home', function($request, $response) {var_dump($request->get());// orecho $request->get('name');
});
接受post参数
route::any('/home', function($request, $response) {var_dump($request->post());// orecho $request->post('name');
});
判断当前请求类型
route::any('/', function($request, $response) {if($request->isGET()) {echo '当前是 GET 请求';}if($request->isPost()) {echo '当前是 Post 请求'; }
});
Response(响应)
重定向
route::get('/', function($request, $response) {return $response->redirect('/home');
});
返回HTTP状态码
route::get('/', function($request, $response) {return $response->statusCode(404);
});
渲染视图
route::get('/', function($request, $response) {return $response->view('index');
});
或者
route::get('/', function($request, $response) {return $response->view('index', ['title' => '首页']);
});
表单验证
<?php
require '../vendor/autoload.php';use Lemon\Route;
use Lemon\Validation;route::get('/', function($request, $response) {/** 规则数组,键为要验证的字段,值为要验证的规则* :姓名 这是别名的写法,可以加也可以不加*/$rules = ['name:姓名' => 'required|min:3|max:9','age:年龄' => 'required|integer','email:邮箱' => 'required|email',];$validator = new Validation($request->get(), $rules);// 判断是否成功验证if(!$validator->success) {//输出[数组]错误debug($validator->errors);}
});
目前支持的规则有以下几点
return ['email' => ':attribute 格式不可用','min' => ':attribute 长度必须大于或等于 :min','max' => ':attribute 长度必须小于 :max.','required' => ':attribute 是必填项','numeric' => ':attribute 必须为数字','integer' => ':attribute 必须为整数','alpha' => ':attribute 必须仅包含字母字符', 'alpha_dash'=> ':attribute 必须仅包含字母、数字、破折号','alpha_num' => ':attribute 必须仅包含字母、数字'];
如果你感兴趣,欢迎扩充验证规程,比如httpurl、ip等等
数据库操作
数据库操作类的命名空间在 Lemon\Database;
,Database 基于Pdo实现的数据库链式查询。
配置
Lemon\Database::set(['driver' => 'mysql','host' => 'localhost','port' => '3306','username' => 'root','password' => '','database' => '','charset' => 'utf8']);
基本使用的例子
<?phprequire '../vendor/autoload.php';use Lemon\Route;
use Lemon\Database;Database::set(['driver' => 'mysql','host' => 'localhost','port' => '3306','username' => 'root','password' => '','database' => '','charset' => 'utf8']);Route::get('/', function($request, $response){$users = Database::table('users')->get();
});Route::run();
get 方法有一个参数,默认是*
,执行成功返回一个数组。
从数据表中获取单个列或行
如果你只需要从数据表中获取一行数据,则可以使用 first 方法。这个方法将返回单个关联数组:
$user = db::table('users')->where('name', 'John')->first();echo $user->name;
如果你不需要一整行数据,则可以带上参数来从单条记录中取出单个值。此方法将直接返回字段的值:
$name= db::table('users')->where('name', 'John')->first('name');echo $name;
find 子句
如果你的某个表主键名正好叫id
,你可以这样找到它。
db::table('users')->find($id);
如果它叫其它什么名
db::table('users')->find($id, 'user_id');
orderBy 子句
orderBy 方法允许你根据指定字段对查询结果进行排序。orderBy 方法的第一个参数是你想要用来排序的字段,而第二个参数则控制排序的顺序,可以为 asc 或 desc:
db::table('users')->orderBy('id')->get();
Where 子句
你可以在查询构造器实例中使用 where 方法从而把 where 子句加入到这个查询中。基本的 where 方法需要3个参数。第一个参数是字段的名称。第二个参数是要对字段进行评估的值。第三个参数是运算符,可选参数默认为=
,它可以是数据库所支持的任何运算符。
$users = db::table('users')->where('votes', 100)->get();$users = db::table('users')->where('votes', 100, '>')->get();
take 子句
你可以使用take 方法来限制查询结果数量,两个参数第一个是起始位置,第二个是取多少条数据:
$users = db::table('users')->take(10, 20)->get();
insert 方法
查询构造器也提供了 insert 方法,用来插入记录到数据表中。insert 方法接收一个包含字段名和值的数组作为参数:
db::table('users')->insert(['email' => 'john@example.com', 'votes' => 0]
);
执行成功返回受影响的行,失败返回false
.
自增 ID
(无)
Updates 方法
当然,除了在数据库中插入记录外,你也可以使用 update 来更新已存在的记录。update 方法和 insert 方法一样,接收含有字段及值的数组,其中包括要更新的字段。可以使用 where 子句来约束 update 查找:
db::table('users')->where('id', 1)->update(['votes' => 1]);
自增或自减
(无)
Delete 方法
查询构造器也可使用 delete 方法从数据表中删除记录。在 delete 前,还可使用 where 子句来约束 delete 语法:
db::table('users')->delete();db::table('users')->where('votes',100,'>')->delete();
实战
基于 Lemon 的博客项目
https://blog.codefun.cn/
源码仓库
https://github.com/chanywn/lemon
欢迎贡献代码
简单快速的开发WEB应用, PHP 框架 Lemon 介绍相关推荐
- java项目_JNPF快速开发平台-简单快速高效开发java项目
◆JNPF快速开发平台 JNPF快速开发平台采用前后端分离技术.采用B/S架构开发,形成一站式开发多端(APP+PC)使用. 使用JNPF开发平台可以简单.快速.高效的构建各种类型java项目. ◆J ...
- python bottle框架搭建_python开发web服务 bottle框架
开发功能不是特别复杂的web服务,可以考虑使用bottle框架.原因:一.Python开发效率高呀!不信你比比同样的功能Python几行可以搞定?换java试试?换C++试试?作为这几种语言都使用过的 ...
- python网页开发好用吗_推荐用于Web开发的最好 Python 框架
Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...
- 简单Android app开发_app开发流程:如何简单快速进行app手机开发?
现在大家的生活已经离不开手机,手机成为最主要的生活工具,app自然也成为最大的流量入口.在流量为王的时代,app手机开发自然成为企业营销及创业赚钱的选择.app开发流程是怎么样的?如何简单快速地开发一 ...
- python web-2019年Python Web五大主流框架
我们都知道风靡一时的Python语言作为人工智能战场上主要使用的枪外,还被广泛应用在Web开发.游戏开发.人工智能.云计算开发.大数据开发.数据分析.科学运算.爬虫.自动化运维.自动化测试等领域,其实 ...
- python开发web应用打包exe,python开发web应用程序
python做web开发有哪些好处和不足 python适合Web开发吗?当然!python涉及的面十分广泛,不过使用python进行开发,你需要先掌握python的基础知识,然后学习python We ...
- 挨踢库(进名企就这么简单)实战开发-李珊-专题视频课程
挨踢库(进名企就这么简单)实战开发-10978人已学习 课程介绍 程序猿的面试金典,各大名企面试经典.各类语言面试. 课程收益 让学员独立完成 讲师介绍 李珊 更多讲师 ...
- 测试开发——搭建一个简单 web服务(flask框架基础)项目实战
搭建一个简单 web服务-flask框架 一.什么是wsgi? 二.搭建一个简单 web服务 三.扩展 四.请求加参数的情况 五.安装flask 一.什么是wsgi? wsgi是webserver和a ...
- API接口开发其实特简单,Python FastApi Web 框架教程来了
文章目录 技术交流.源码分享 一.FastApi?? 1.FastAPI可以做什么 2.为什么要学习 FastAPI 二.准备工作 1.编译器工具 2.python安装教程 3.pycharm安装教程 ...
最新文章
- dr.web for android version 9,DrWeb安全防护
- Visual Studio 2017 正式版各版本比较:企业版最强大
- Kotlin学习笔记 第四章 解构声明 集合集合的扩展方法 Range 异常 Throw关键字
- Ubuntu18.04 evo安装
- 内容 超链接_Word高效办公:自动创建带超链接的内容目录和图表目录
- java实训报告_Java实验报告三
- 初中英语和计算机融合的教学案例,信息技术与初中英语学科教学的深度融合
- ubuntu下安装jre 7
- 【STM32F407F429H7的DSP教程】第34章 滤波器基础知识
- 直博人数远大于硕士人数,清华计算机系到底有多强?
- Linux下为Calibre书库打中文目录名与文件名补丁
- 微信推送封面尺寸_微信公众平台图片尺寸是多少?
- C语言执行时进行窗口隐藏
- 深度模型的日志异常检测,还有谁不会?
- Atypical Games推出《辐射岛》和《辐射之城》的后续游戏
- myQNX account试用申请流程(license申请)
- 基于两个移动平均线交叉的EA
- 日式风格小荷才露尖尖角
- vue 修改模板{{}}标签_vue.js - Vue单文件的template标签
- python车牌识别使用训练集_基于Python 实现的车牌识别项目
热门文章
- 重磅!2019年诺贝尔生理学或医学奖揭晓,“细胞感知氧气通路”摘得桂冠
- 深度学习奠基人特伦斯:美国学界已经找到了解释人工智能“黑盒子”的方法...
- IEEE论文:城市大脑,基于互联网大脑模型的智慧城市建设
- 对号入座,看看未来几年机器人是否会取代你的工作
- 华为《5G业务商业价值评估》白皮书!
- 神经学家探寻:机器如何拥有意识!如何避免机器人伤害我们!
- 涌进体制的技术人:Nature 发文硕士回乡当公务员
- 我给 Apache 顶级项目提了个 Bug
- AI实战:人脸识别实战项目(源码共享)
- skyline粒子效果xml获取