亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

從PHP Laravel 到 Go Iris--路由篇

lingdududu / 3448人閱讀

摘要:可以通過(guò)來(lái)直接設(shè)置路由前綴給添加前綴通過(guò),還是通過(guò)就可以了匹配包含的匹配包含的好了,這兩個(gè)框架的路由基本比較和應(yīng)用就這些了,還有一些比如控制器路由和如何自定義中間件等在后續(xù)再寫(xiě)吧,或者請(qǐng)自行查閱文檔,以上內(nèi)容如有錯(cuò)誤請(qǐng)指出。

Laravel是我最喜歡的PHP Web開(kāi)發(fā)框架,所以也希望可以在Go的Web框架中選擇一個(gè)類(lèi)似Laravel這樣的好用又全棧的框架,刷了一下Beego, Echo , Gin, 以及Iris的文檔,最終還是選擇Iris,當(dāng)然我是沒(méi)有從性能角度考慮,只是從可以快速開(kāi)發(fā),且支持的特性全還有就是看著順眼的心理選擇了Iris,應(yīng)該有不少PHPer像我一樣使用Laravel同時(shí)在學(xué)習(xí)Go,所以為了便于Laravel開(kāi)發(fā)者可以快速的轉(zhuǎn)到Iris開(kāi)發(fā),我準(zhǔn)備寫(xiě)一系列這兩者框架的比較文章。

基本路由

Iris構(gòu)建基本路由和Laravel的基本路由很像,都只需要一個(gè)URI與一個(gè)閉包:

Laravel

Route::get("foo", function () {
    return "Hello World";
});

Iris

app.Get("/foo", func(ctx iris.Context) {
    ctx.WriteString("Hello World")
})
可用的路由方法

Iris和Laravel一樣,能夠響應(yīng)任何的HTTP請(qǐng)求路由:

Laravel

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Iris

app.Post("/", func(ctx iris.Context){})
app.Put("/", func(ctx iris.Context){})
app.Delete("/", func(ctx iris.Context){})
app.Options("/", func(ctx iris.Context){})
app.Trace("/", func(ctx iris.Context){})
app.Head("/", func(ctx iris.Context){})
app.Connect("/", func(ctx iris.Context){})
app.Patch("/", func(ctx iris.Context){})

對(duì)于注冊(cè)一個(gè)可以響應(yīng)多個(gè)HTTP請(qǐng)求的路由兩者同樣都支持

Laravel

Route::match(["get", "post"], "/", function () {
});

Route::any("foo", function () {
});

Iris

app.Any("/", func(ctx iris.Context){})
路由參數(shù) 必填參數(shù)

Iris的定義路由必填參數(shù)和Laravel差不多,這里需要注意下Laravel的路由參數(shù)不能包含 - 字符,可以用用下劃線(xiàn) _ 替換

Laravel

Route::get("user/{id}", function ($id) {
    return "User ".$id;
});

Iris

app.Get("/user/{id}", func(ctx iris.Context) {
    userID, err := ctx.Params().GetInt("userid")
    if err != nil {
        //
    }
      ctx.Writef("User %d", userID)
})
正則約束

Iris同樣支持正則約束,直接在路由參數(shù)中設(shè)置很方便,Laravel的路由設(shè)置可以通過(guò)where鏈?zhǔn)椒椒?,也很直觀:

Laravel

Route::get("user/{name}", function ($name) {
})->where("name", "[A-Za-z]+");

Iris

app.Get("/user/{name:string regexp(^[A-Za-z]+)}", func(ctx iris.Context) {})
全局約束

Iris沒(méi)有對(duì)路由參數(shù)全局約束,Laravel可以通過(guò)RouteServiceProviderboot中定義pattern來(lái)定義,但是Iris可以通過(guò)標(biāo)準(zhǔn)的macro或者自定義macro來(lái)約束參數(shù):

Laravel

public function boot()
{
    Route::pattern("id", "[0-9]+");
    parent::boot();
}

Iris

app.Get("/profile/{id:int min(3)}", func(ctx iris.Context) {
})
//當(dāng)然標(biāo)準(zhǔn)的 macro 除了int 還有string,alphabetical,file,path當(dāng)然你也可以自己注冊(cè)一個(gè)macro來(lái)改變約束規(guī)則
app.Macros().String.RegisterFunc("equal", func(argument string) func(paramValue string) bool {
    return func(paramValue string){ return argument == paramValue }
})
//實(shí)現(xiàn)app.Macros().類(lèi)型.RegisterFunc()方法即可
命名路由

Iris和Laravel都支持給指定的路由命名,而且方式很像:

Laravel

Route::get("user/profile", function () {
})->name("profile");

Iris

app.Get("/user/profile", func(ctx iris.Context) {
}).Name = "profile"
為命名生成鏈接

Laravel通過(guò)route()方法來(lái)根據(jù)路由名和參數(shù)生成URL鏈接,Iris也提供了對(duì)應(yīng)的方法來(lái)生成鏈接:

Laravel

$url = route("profile", ["id" => 1]);

Iris

rv := router.NewRoutePathReverser(app)
url := rv.URL("profile",1)
//URL(routeName string, paramValues ...interface{})
//Path(routeName string, paramValues ...interface{} 不包含host 和 protocol
檢查當(dāng)前路由

檢查當(dāng)前請(qǐng)求是否指向了某理由:

Laravel

if ($request->route()->named("profile")) {}

Iris

if ctx.GetCurrentRoute().Name() == "profile" {}
路由組

路由組可以共享路由屬性,Laravel所支持的路由組屬性Iris也基本都支持,而且很像,都很優(yōu)雅.

中間件

通過(guò)中間件可以對(duì)路由請(qǐng)求約束,對(duì)于日常開(kāi)發(fā)非常有用,比如做Auth驗(yàn)證,可以直接通過(guò)中間件來(lái)做隔離:

Laravel

Route::middleware(["auth"])->group(function () {
    Route::get("user/profile", function () {
        // 使用 auth 中間件
    });
});

Iris

authentication := basicauth.New(authConfig)
needAuth := app.Party("/user", authentication)
{
    needAuth.Get("/profile", h)
}
子域名路由

在Laravel中,路由組可以用作子域名的通配符,使用路由組屬性的 domain 鍵聲明子域名。Iiris可以通過(guò)Party來(lái)直接設(shè)置:

Laravel

Route::group(["domain" => "{subdomain}.myapp.com"], function () {
    Route::get("user/{id}", function ($account, $id) {
        //
    });
});

Iris

subdomain := app.Party("subdomain.")
{
    subdomain.Get("/user/{id}", func(ctx iris.Context) {
        //
    })
}

dynamicSubdomains := app.Party("*.")
{
    dynamicSubdomains.Get("/user/{id}", func(ctx iris.Context) {
        //
    })
}
路由前綴

給URL添加前綴,Laravel 通過(guò)prefix,Iris還是通過(guò)Party就可以了

Laravel

Route::prefix("admin")->group(function () {
    Route::get("users", function () {
        // 匹配包含 "/admin/users" 的 URL
    });
});

Iris

adminUsers := app.Party("/admin")
{
    adminUsers.Get("/users", , func(ctx iris.Context) {
        // 匹配包含 "/admin/users" 的 URL
    })
}

好了,這兩個(gè)web框架的路由基本比較和應(yīng)用就這些了,還有一些比如控制器路由和如何自定義中間件等在后續(xù)再寫(xiě)吧,或者請(qǐng)自行查閱文檔,以上內(nèi)容如有錯(cuò)誤請(qǐng)指出。

轉(zhuǎn)載請(qǐng)注明:?轉(zhuǎn)載自Ryan是菜鳥(niǎo) | LNMP技術(shù)棧筆記

如果覺(jué)得本篇文章對(duì)您十分有益,何不 打賞一下

本文鏈接地址:?從PHP Laravel 到 Go Iris--路由篇

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/25831.html

相關(guān)文章

  • PHP To Go 轉(zhuǎn)型手記 (終)

    摘要:本章以實(shí)戰(zhàn)方式來(lái)對(duì)比以下與的寫(xiě)法。寫(xiě)這類(lèi)的文章也遭到了很多質(zhì)疑,作為一個(gè)手記去發(fā)布僅僅為了讓想去學(xué)習(xí)其他語(yǔ)言的朋友了對(duì)新語(yǔ)言的一個(gè)認(rèn)識(shí),不是去對(duì)比其不同。 showImg(https://segmentfault.com/img/bVbi4ot?w=800&h=533); 前言 作為一名PHP程序員,我感到榮幸。但在時(shí)代不斷的變遷中,要具備足夠的知識(shí)才可生存。 那就從Go語(yǔ)言學(xué)起把。 ...

    leanxi 評(píng)論0 收藏0
  • PHPer面試指南-Laravel

    摘要:簡(jiǎn)述的生命周期采用了單一入口模式,應(yīng)用的所有請(qǐng)求入口都是文件。分發(fā)請(qǐng)求一旦應(yīng)用完成引導(dǎo)和所有服務(wù)提供者都注冊(cè)完成,將會(huì)移交給路由進(jìn)行分發(fā)。此外,由于對(duì)動(dòng)態(tài)方法的獨(dú)特用法,也使測(cè)試起來(lái)非常容易。 本書(shū)的 GitHub 地址:https://github.com/todayqq/PH... Laravel 作為現(xiàn)在最流行的 PHP 框架,其中的知識(shí)較多,所以單獨(dú)拿出來(lái)寫(xiě)一篇。 簡(jiǎn)述 La...

    alaege 評(píng)論0 收藏0
  • Laravel 5 系列教程二:路由,視圖,控制器工作流程

    摘要:但是不用擔(dān)心,我們后續(xù)的教程會(huì)陸續(xù)講解相關(guān)的內(nèi)容。所以上面的路由注冊(cè)其實(shí)就是負(fù)責(zé)解決訪(fǎng)問(wèn)的時(shí)候的響應(yīng)。 原文來(lái)自:https://jellybool.com/post/programming-with-laravel-5-routers-views-controllers-workflow 免費(fèi)視頻教程地址 https://laravist.com/series/laravel-5-b...

    awesome23 評(píng)論0 收藏0
  • laravel框架應(yīng)用和composer擴(kuò)展包開(kāi)發(fā)

    摘要:官方地址是目前最流行的框架,發(fā)展勢(shì)頭迅猛,應(yīng)用非常廣泛,有豐富的擴(kuò)展包可以應(yīng)付你能想到的各種應(yīng)用場(chǎng)景,框架思想前衛(wèi),跟隨時(shí)代潮流,提倡優(yōu)雅代碼,自稱(chēng)為工匠,其中的模板引擎容器以及擴(kuò)展包為業(yè)務(wù)的開(kāi)發(fā)提供了極大的便利。 laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,發(fā)展勢(shì)頭迅猛,應(yīng)用非常廣泛,有豐富的擴(kuò)展包可以應(yīng)付你能想到的各種應(yīng)用場(chǎng)景,lara...

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

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

0條評(píng)論

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