简单的php框架例子,简单快速的开发WEB应用, PHP 框架 Lemon 介绍

喜欢(❤ ω ❤) laravel 但是它太笨重了

想快速简洁的开发小项目,试一试Lemon 吧d1ce9242ccb89765cb51c6eb713e1cf9.png

Lemon 是一个现代的 PHP 框架,采用 composer 管理组件依赖。

f50df66fcccdfaf487d22ce7bd35f31a.gif

如何使用 Lemon

安装

前面已经说过 Lemon 采用 composer 加载。

第一步,使用 composer 安装

mkdir lemon

cd lemon

composer 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

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 .'
';

echo $request->method .'
';

echo $request->ip .'
';

});

接受get参数

localhost:3000/home?name=razor&age=0

route::get('/home', function($request, $response) {

var_dump($request->get());

// or

echo $request->get('name');

});

接受post参数

route::any('/home', function($request, $response) {

var_dump($request->post());

// or

echo $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' => '首页']);

});

表单验证

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'

]);

基本使用的例子

require '../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 的博客项目

源码仓库

欢迎贡献代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值