喜欢(❤ ω ❤) 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,这两个参数,这两个参数是RequestResponse类的实例,是回调函数的必须参数。这两个参数很有用,之后会介绍。

通配符路由

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 介绍相关推荐

  1. java项目_JNPF快速开发平台-简单快速高效开发java项目

    ◆JNPF快速开发平台 JNPF快速开发平台采用前后端分离技术.采用B/S架构开发,形成一站式开发多端(APP+PC)使用. 使用JNPF开发平台可以简单.快速.高效的构建各种类型java项目. ◆J ...

  2. python bottle框架搭建_python开发web服务 bottle框架

    开发功能不是特别复杂的web服务,可以考虑使用bottle框架.原因:一.Python开发效率高呀!不信你比比同样的功能Python几行可以搞定?换java试试?换C++试试?作为这几种语言都使用过的 ...

  3. python网页开发好用吗_推荐用于Web开发的最好 Python 框架

    Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...

  4. 简单Android app开发_app开发流程:如何简单快速进行app手机开发?

    现在大家的生活已经离不开手机,手机成为最主要的生活工具,app自然也成为最大的流量入口.在流量为王的时代,app手机开发自然成为企业营销及创业赚钱的选择.app开发流程是怎么样的?如何简单快速地开发一 ...

  5. python web-2019年Python Web五大主流框架

    我们都知道风靡一时的Python语言作为人工智能战场上主要使用的枪外,还被广泛应用在Web开发.游戏开发.人工智能.云计算开发.大数据开发.数据分析.科学运算.爬虫.自动化运维.自动化测试等领域,其实 ...

  6. python开发web应用打包exe,python开发web应用程序

    python做web开发有哪些好处和不足 python适合Web开发吗?当然!python涉及的面十分广泛,不过使用python进行开发,你需要先掌握python的基础知识,然后学习python We ...

  7. 挨踢库(进名企就这么简单)实战开发-李珊-专题视频课程

    挨踢库(进名企就这么简单)实战开发-10978人已学习 课程介绍         程序猿的面试金典,各大名企面试经典.各类语言面试. 课程收益     让学员独立完成 讲师介绍     李珊 更多讲师 ...

  8. 测试开发——搭建一个简单 web服务(flask框架基础)项目实战

    搭建一个简单 web服务-flask框架 一.什么是wsgi? 二.搭建一个简单 web服务 三.扩展 四.请求加参数的情况 五.安装flask 一.什么是wsgi? wsgi是webserver和a ...

  9. API接口开发其实特简单,Python FastApi Web 框架教程来了

    文章目录 技术交流.源码分享 一.FastApi?? 1.FastAPI可以做什么 2.为什么要学习 FastAPI 二.准备工作 1.编译器工具 2.python安装教程 3.pycharm安装教程 ...

最新文章

  1. dr.web for android version 9,DrWeb安全防护
  2. Visual Studio 2017 正式版各版本比较:企业版最强大
  3. Kotlin学习笔记 第四章 解构声明 集合集合的扩展方法 Range 异常 Throw关键字
  4. Ubuntu18.04 evo安装
  5. 内容 超链接_Word高效办公:自动创建带超链接的内容目录和图表目录
  6. java实训报告_Java实验报告三
  7. 初中英语和计算机融合的教学案例,信息技术与初中英语学科教学的深度融合
  8. ubuntu下安装jre 7
  9. 【STM32F407F429H7的DSP教程】第34章 滤波器基础知识
  10. 直博人数远大于硕士人数,清华计算机系到底有多强?
  11. Linux下为Calibre书库打中文目录名与文件名补丁
  12. 微信推送封面尺寸_微信公众平台图片尺寸是多少?
  13. C语言执行时进行窗口隐藏
  14. 深度模型的日志异常检测,还有谁不会?
  15. Atypical Games推出《辐射岛》和《辐射之城》的后续游戏
  16. myQNX account试用申请流程(license申请)
  17. 基于两个移动平均线交叉的EA
  18. 日式风格小荷才露尖尖角
  19. vue 修改模板{{}}标签_vue.js - Vue单文件的template标签
  20. python车牌识别使用训练集_基于Python 实现的车牌识别项目

热门文章

  1. 重磅!2019年诺贝尔生理学或医学奖揭晓,“细胞感知氧气通路”摘得桂冠
  2. 深度学习奠基人特伦斯:美国学界已经找到了解释人工智能“黑盒子”的方法...
  3. IEEE论文:城市大脑,基于互联网大脑模型的智慧城市建设
  4. 对号入座,看看未来几年机器人是否会取代你的工作
  5. 华为《5G业务商业价值评估》白皮书!
  6. 神经学家探寻:机器如何拥有意识!如何避免机器人伤害我们!
  7. 涌进体制的技术人:Nature 发文硕士回乡当公务员
  8. 我给 Apache 顶级项目提了个 Bug
  9. AI实战:人脸识别实战项目(源码共享)
  10. skyline粒子效果xml获取