成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

簡(jiǎn)單快速的開發(fā)WEB應(yīng)用, PHP 框架 Lemon 介紹

lushan / 2026人閱讀

摘要:你可能已經(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ù)是RequestResponse類的實(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

相關(guān)文章

  • 使用 Xdebug 在 PHPStorm 中調(diào)試 PHP 程序(框架/原生均適用)

    摘要:紅色方形,表示中斷當(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)...

    cloud 評(píng)論0 收藏0
  • PHP 學(xué)習(xí)總結(jié)之?dāng)?shù)組

    摘要:概述我們知道,在編程語言中,數(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...

    wangdai 評(píng)論0 收藏0
  • 堅(jiān)持不懈續(xù)集 (二) 初學(xué)者挑戰(zhàn)學(xué)習(xí)Python編程30天

    摘要:元組是有序且不可更改或不可修改不可變的集合。不允許重復(fù)成員。列表是有序且可修改可變的不同數(shù)據(jù)類型的集合。避免上述問題的一種方法是使用。計(jì)數(shù)橙色年齡,,,,,,,打印年齡。語法反轉(zhuǎn)水果香蕉,橙色,芒果,檸檬水果。按字母順序排序,年齡。 ...

    Amio 評(píng)論0 收藏0
  • Spring Boot簡(jiǎn)單環(huá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,還可以更加容易...

    dack 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<