摘要:你可能已經(jīng)注意到了回調(diào)函數(shù)中的和,這兩個(gè)參數(shù),這兩個(gè)參數(shù)是和類的實(shí)例,是回調(diào)函數(shù)的必須參數(shù)。這兩個(gè)參數(shù)很有用,之后會(huì)介紹。上面典型的路由匹配的是一個(gè),匹配多個(gè)值的時(shí)候,回調(diào)函數(shù)中的參數(shù)位置對(duì)應(yīng)匹配的值,參數(shù)名自定。
喜歡(? ω ?) laravel 但是它太笨重了
想快速簡(jiǎn)潔的開發(fā)小項(xiàng)目,試一試Lemon 吧。
Lemon 是一個(gè)現(xiàn)代的 PHP 框架,采用 composer 管理組件依賴。
如何使用 Lemon 安裝前面已經(jīng)說過 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();第三步,執(zhí)行內(nèi)置服務(wù)器
php -S localhost:4000
接下來,打開瀏覽器,訪問 http://localhost:4000
Lemon 的功能 路由在 Lemon 中的路由是通過匹配的URL模式與回調(diào)函數(shù)。
Route::get("/", function($request, $response) { echo "index"; });
當(dāng)然也可以這樣表示
Route::get("/", "hello"); function hello($request, $response){ echo "index"; }請(qǐng)求方式
Route 是路由模塊的靜態(tài)類,您可以通過執(zhí)行route類的各種靜態(tài)方法來響應(yīng)特定方法。
Route::get("/method/1", function($request, $response) { echo "我收到了一個(gè) GET 請(qǐng)求"; }); Route::post("/method/2", function($request, $response) { echo "我收到了一個(gè) POST 請(qǐng)求"; }); Route::put("/method/3", function($request, $response) { echo "我收到了一個(gè) GET 請(qǐng)求"; }); Route::delete("/method/4", function($request, $response) { echo "我收到了一個(gè) POST 請(qǐng)求"; }); Route::any("/method/5", function($request, $response) { echo sprintf("我收到了一個(gè) %s 請(qǐng)求", $request->method); });
哈哈,可以愉快的開發(fā) restful api 了。
你可能已經(jīng)注意到了回調(diào)函數(shù)中的 $request 和 $response,這兩個(gè)參數(shù),這兩個(gè)參數(shù)是Request和Response類的實(shí)例,是回調(diào)函數(shù)的必須參數(shù)。這兩個(gè)參數(shù)很有用,之后會(huì)介紹。
通配符路由route::get("/hello/(:any)", function($request, $response, $name) { echo "hello " . $name; });
該方法第一個(gè)參數(shù)是要匹配的路由URL,其中(:any) 通配符用來匹配任意值。在回調(diào)函數(shù)中我們使用了$name參數(shù)來接收這個(gè)值。
上面典型的路由匹配的是一個(gè),匹配多個(gè)值的時(shí)候,回調(diào)函數(shù)中的參數(shù)位置對(duì)應(yīng)匹配的值,參數(shù)名自定
。
route::get("/(:num)/(:num)/(:num)", function($request, $response, $year, $month, $day) { echo $year . "/" . $month . "/" . $day; });
(:num) 匹配只含有數(shù)字的一段。 (:any) 匹配含有任意字符的一段。
Request(請(qǐng)求)得到當(dāng)前請(qǐng)求的路徑、方法、ip
route::get("/", function($request, $response) { echo $request->path ."
"; echo $request->method ."
"; echo $request->ip ."
"; });
接受get參數(shù)
localhost:3000/home?name=razor&age=0
route::get("/home", function($request, $response) { var_dump($request->get()); // or echo $request->get("name"); });
接受post參數(shù)
route::any("/home", function($request, $response) { var_dump($request->post()); // or echo $request->post("name"); });
判斷當(dāng)前請(qǐng)求類型
route::any("/", function($request, $response) { if($request->isGET()) { echo "當(dāng)前是 GET 請(qǐng)求"; } if($request->isPost()) { echo "當(dāng)前是 Post 請(qǐng)求"; } });Response(響應(yīng))
重定向
route::get("/", function($request, $response) { return $response->redirect("/home"); });
返回HTTP狀態(tài)碼
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" => "首頁"]); });表單驗(yàn)證
"required|min:3|max:9", "age:年齡" => "required|integer", "email:郵箱" => "required|email", ]; $validator = new Validation($request->get(), $rules); // 判斷是否成功驗(yàn)證 if(!$validator->success) { //輸出[數(shù)組]錯(cuò)誤 debug($validator->errors); } });
目前支持的規(guī)則有以下幾點(diǎn)
return [ "email" => ":attribute 格式不可用", "min" => ":attribute 長度必須大于或等于 :min", "max" => ":attribute 長度必須小于 :max.", "required" => ":attribute 是必填項(xiàng)", "numeric" => ":attribute 必須為數(shù)字", "integer" => ":attribute 必須為整數(shù)", "alpha" => ":attribute 必須僅包含字母字符", "alpha_dash"=> ":attribute 必須僅包含字母、數(shù)字、破折號(hào)", "alpha_num" => ":attribute 必須僅包含字母、數(shù)字" ];
如果你感興趣,歡迎擴(kuò)充驗(yàn)證規(guī)程,比如httpurl、ip等等
數(shù)據(jù)庫操作數(shù)據(jù)庫操作類的命名空間在 LemonDatabase; ,Database 基于Pdo實(shí)現(xiàn)的數(shù)據(jù)庫鏈?zhǔn)讲樵儭?/p> 配置
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 方法有一個(gè)參數(shù),默認(rèn)是*,執(zhí)行成功返回一個(gè)數(shù)組。
從數(shù)據(jù)表中獲取單個(gè)列或行如果你只需要從數(shù)據(jù)表中獲取一行數(shù)據(jù),則可以使用 first 方法。這個(gè)方法將返回單個(gè)關(guān)聯(lián)數(shù)組:
$user = db::table("users")->where("name", "John")->first(); echo $user->name;
如果你不需要一整行數(shù)據(jù),則可以帶上參數(shù)來從單條記錄中取出單個(gè)值。此方法將直接返回字段的值:
$name= db::table("users")->where("name", "John")->first("name"); echo $name;find 子句
如果你的某個(gè)表主鍵名正好叫id,你可以這樣找到它。
db::table("users")->find($id);
如果它叫其它什么名
db::table("users")->find($id, "user_id");orderBy 子句
orderBy 方法允許你根據(jù)指定字段對(duì)查詢結(jié)果進(jìn)行排序。orderBy 方法的第一個(gè)參數(shù)是你想要用來排序的字段,而第二個(gè)參數(shù)則控制排序的順序,可以為 asc 或 desc:
db::table("users")->orderBy("id")->get();Where 子句
你可以在查詢構(gòu)造器實(shí)例中使用 where 方法從而把 where 子句加入到這個(gè)查詢中?;镜?where 方法需要3個(gè)參數(shù)。第一個(gè)參數(shù)是字段的名稱。第二個(gè)參數(shù)是要對(duì)字段進(jìn)行評(píng)估的值。第三個(gè)參數(shù)是運(yùn)算符,可選參數(shù)默認(rèn)為=,它可以是數(shù)據(jù)庫所支持的任何運(yùn)算符。
$users = db::table("users")->where("votes", 100)->get(); $users = db::table("users")->where("votes", 100, ">")->get();take 子句
你可以使用take 方法來限制查詢結(jié)果數(shù)量,兩個(gè)參數(shù)第一個(gè)是起始位置,第二個(gè)是取多少條數(shù)據(jù):
$users = db::table("users")->take(10, 20)->get();insert 方法
查詢構(gòu)造器也提供了 insert 方法,用來插入記錄到數(shù)據(jù)表中。insert 方法接收一個(gè)包含字段名和值的數(shù)組作為參數(shù):
db::table("users")->insert( ["email" => "[email protected]", "votes" => 0] );
執(zhí)行成功返回受影響的行,失敗返回false.
自增 ID(無)
Updates 方法當(dāng)然,除了在數(shù)據(jù)庫中插入記錄外,你也可以使用 update 來更新已存在的記錄。update 方法和 insert 方法一樣,接收含有字段及值的數(shù)組,其中包括要更新的字段。可以使用 where 子句來約束 update 查找:
db::table("users")->where("id", 1)->update(["votes" => 1]);自增或自減
(無)
Delete 方法查詢構(gòu)造器也可使用 delete 方法從數(shù)據(jù)表中刪除記錄。在 delete 前,還可使用 where 子句來約束 delete 語法:
db::table("users")->delete(); db::table("users")->where("votes",100,">")->delete();實(shí)戰(zhàn)
基于 Lemon 的博客項(xiàng)目
https://blog.codefun.cn/
https://github.com/chanywn/lemon
歡迎貢獻(xiàn)代碼
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/23184.html
摘要:紅色方形,表示中斷當(dāng)前程序調(diào)試。第三個(gè)圖形示,強(qiáng)制進(jìn)入當(dāng)前函數(shù)內(nèi)部的程序。框架說明加載的文件列表可以觀察到所有全局變量當(dāng)前局部變量的數(shù)值可以新增變量,觀察變量隨著程序執(zhí)行的變化。參考文章使用與調(diào)試一 序言 Xdebug 作為 PHP 調(diào)試工具,提供了豐富的調(diào)試函數(shù)和配置,可以直觀的看到 PHP 源代碼的步進(jìn)和性能數(shù)據(jù),以便優(yōu)化PHP代碼。 使用 phpstorm + xdebug 來調(diào)...
摘要:概述我們知道,在編程語言中,數(shù)組的使用頻率是很高的,幾乎每個(gè)腳本都會(huì)使用到。循環(huán)缺點(diǎn)遍歷完成之后,不能對(duì)數(shù)組進(jìn)行第二次遍歷數(shù)組內(nèi)部指針指向了最后一個(gè)元素。 概述 我們知道,在 PHP 編程語言中,數(shù)組的使用頻率是很高的,幾乎每個(gè)腳本都會(huì)使用到。 PHP 自帶了大量的、優(yōu)秀的操作數(shù)組的函數(shù)以供我們使用,本文就對(duì)這些數(shù)組函數(shù)的使用做一些分類和總結(jié),方便大家以后查閱。 創(chuàng)建 1. range...
摘要:元組是有序且不可更改或不可修改不可變的集合。不允許重復(fù)成員。列表是有序且可修改可變的不同數(shù)據(jù)類型的集合。避免上述問題的一種方法是使用。計(jì)數(shù)橙色年齡,,,,,,,打印年齡。語法反轉(zhuǎn)水果香蕉,橙色,芒果,檸檬水果。按字母順序排序,年齡。 ...
摘要:一創(chuàng)建一個(gè)簡(jiǎn)單的項(xiàng)目使用,通過導(dǎo)入的模塊,可以將許多程序依賴的包自動(dòng)導(dǎo)入到工程中。三啟動(dòng)項(xiàng)目啟動(dòng)項(xiàng)目,也就是運(yùn)行方法,在瀏覽器訪問,即將看到頁面上顯示了。其實(shí)在依賴中集成了,服務(wù)器服務(wù)由提供。 一、創(chuàng)建一個(gè)簡(jiǎn)單的Maven項(xiàng)目 使用Maven,通過導(dǎo)入Spring Boot的starter模塊,可以將許多程序依賴的包自動(dòng)導(dǎo)入到工程中。使用Maven的parent POM,還可以更加容易...
閱讀 3794·2021-09-02 09:53
閱讀 2777·2021-07-30 14:57
閱讀 3518·2019-08-30 13:09
閱讀 1229·2019-08-29 13:25
閱讀 837·2019-08-29 12:28
閱讀 1476·2019-08-29 12:26
閱讀 1158·2019-08-28 17:58
閱讀 3330·2019-08-26 13:28