资讯专栏INFORMATION COLUMN

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

lushan / 1654人阅读

摘要:你可能已经注意到了回调函数中的和,这两个参数,这两个参数是和类的实例,是回调函数的必须参数。这两个参数很有用,之后会介绍。上面典型的路由匹配的是一个,匹配多个值的时候,回调函数中的参数位置对应匹配的值,参数名自定。

喜欢(❤ ω ❤) laravel 但是它太笨重了
想快速简洁的开发小项目,试一试Lemon 吧

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

如何使用 Lemon 安装

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

第一步,使用 composer 安装
mkdir lemon

cd lemon

composer require chanywn/lemon
第二步,新建 index.php 文件
require "vendor/autoload.php";

use LemonRoute;

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 ."
"; 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" => "首页"]);
});
表单验证
 "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等等

数据库操作

数据库操作类的命名空间在 LemonDatabase; ,Database 基于Pdo实现的数据库链式查询。

配置
LemonDatabase::set([
        "driver"    => "mysql",
        "host"     => "localhost",
        "port"     => "3306",
        "username" => "root",
        "password" => "",
        "database" => "",
        "charset"  => "utf8"
    ]);
基本使用的例子
 "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

欢迎贡献代码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23184.html

相关文章

  • 使用 Xdebug 在 PHPStorm 中调试 PHP 程序(框架/原生均适用)

    摘要:红色方形,表示中断当前程序调试。第三个图形示,強制进入当前函数內部的程序。框架说明加载的文件列表可以观察到所有全局变量当前局部变量的数值可以新增变量,观察变量随着程序执行的变化。参考文章使用与调试一 序言 Xdebug 作为 PHP 调试工具,提供了丰富的调试函数和配置,可以直观的看到 PHP 源代码的步进和性能数据,以便优化PHP代码。 使用 phpstorm + xdebug 来调...

    cloud 评论0 收藏0
  • PHP 学习总结之数组

    摘要:概述我们知道,在编程语言中,数组的使用频率是很高的,几乎每个脚本都会使用到。循环缺点遍历完成之后,不能对数组进行第二次遍历数组内部指针指向了最后一个元素。 概述 我们知道,在 PHP 编程语言中,数组的使用频率是很高的,几乎每个脚本都会使用到。 PHP 自带了大量的、优秀的操作数组的函数以供我们使用,本文就对这些数组函数的使用做一些分类和总结,方便大家以后查阅。 创建 1. range...

    wangdai 评论0 收藏0
  • 坚持不懈续集 (二) 初学者挑战学习Python编程30天

    摘要:元组是有序且不可更改或不可修改不可变的集合。不允许重复成员。列表是有序且可修改可变的不同数据类型的集合。避免上述问题的一种方法是使用。计数橙色年龄,,,,,,,打印年龄。语法反转水果香蕉,橙色,芒果,柠檬水果。按字母顺序排序,年龄。 ...

    Amio 评论0 收藏0
  • Spring Boot简单环境搭建

    摘要:一创建一个简单的项目使用,通过导入的模块,可以将许多程序依赖的包自动导入到工程中。三启动项目启动项目,也就是运行方法,在浏览器访问,即将看到页面上显示了。其实在依赖中集成了,服务器服务由提供。 一、创建一个简单的Maven项目 使用Maven,通过导入Spring Boot的starter模块,可以将许多程序依赖的包自动导入到工程中。使用Maven的parent POM,还可以更加容易...

    dack 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<