簡單、快速且非常實用。 minasrouter是 MVC 專案的 PHP 路由元件!它抽象化了 RESTfull 動詞
(GET, POST, PUT, PATCH, DELETE)
並在應用程式控制器中以簡單易用的方式呈現。
minasrouter
獨立地工作和處理所有訊息,使開發人員的流程更加輕鬆,並加速專案的開發/進度。
簡單、快速且非常實用。 minasrouter是 MVC 專案的 PHP 路由元件!它旨在抽象化 RESTfull(GET、POST、PUT、PATCH、DELETE)動詞,並在應用程式控制器中簡單輕鬆地呈現它們。
minasrouter獨立地工作和處理所有訊息,為開發人員簡化流程並加速專案的開發/進度。
(Yes, it really is a few minutes)
有了兩條線,您就可以開始使用路線了!
也許你是一個邊看邊學的人,你可以存取 example 資料夾,其中包含我們如何使用minasrouter資料夾架構範例。
您可以在此處檢查完成的所有測試。享受!
minasrouter可透過Composer require
取得:
" require " {
"nicollassilva/ minasrouter " : " ^1.0 "
}
或在終端機中運作:
composer require nicollassilva/ minasrouter
要開始使用minasrouter ,所有導航管理必須重定向到系統的預設路由文件,該文件將執行整個路由處理過程並返回預設配置的內容。根據下面的範例並根據您的伺服器進行配置。
要開始使用minasrouter ,所有導航管理必須重定向到系統的預設路由文件,該文件將執行整個路由處理過程並返回預設配置的內容。根據下面的範例並根據您的伺服器進行配置。
RewriteEngine on
Options All -Indexes
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} (www.)?localhost
RewriteRule (.*) https:// %{HTTP_HOST} [L,R=301]
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]
RewriteEngine On
# Options All -Indexes
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# URL Rewrite
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=/$1 [L,QSA]
# ## Do not use the settings below if you are using developing in a local environment, use only in production.
# # WWW Redirect
# RewriteCond %{HTTP_HOST} !^www. [NC]
# RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# # HTTPS Redirect
# RewriteCond %{HTTP:X-Forwarded-Proto} !https
# RewriteCond %{HTTPS} off
# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
location / {
if ( $script_filename !~ "-f" ){
rewrite ^(.*)$ /index.php?route=/ $1 break;
}
}
啟動組件:
<?php
require __DIR__ . " /../vendor/autoload.php " ;
use minasrouter Router Route ;
// The second argument is optional. It separates the Controller and Method from the string
// Example: "Controller@method"
Route:: start ( " http://yourdomain.com " , " @ " );
Route:: get ( " / " , function () {
// ...
});
// ... all routes here
// You will put all your routes before this function
Route:: execute ();
方法:
功能 | 範圍 | 範圍 | 範圍 |
---|---|---|---|
得到 | 字串 $uri | $回調 | |
郵政 | 字串 $uri | $回調 | |
放 | 字串 $uri | $回調 | |
修補 | 字串 $uri | $回調 | |
刪除 | 字串 $uri | $回調 | |
匹配 | 數組 $httpVerbs | 字串 $uri | $回調 |
任何 | 字串 $uri | $回調 |
例子:
Route:: get ( ' /users ' , [ App Controllers User::class, ' index ' ]);
Route:: post ( ' /users ' , [ App Controllers User::class, ' store ' ]);
Route:: put ( ' /users/{id} ' , [ App Controllers User::class, ' update ' ]);
Route:: patch ( ' /users/{id} ' , [ App Controllers User::class, ' update ' ]);
Route:: delete ( ' /users/{id} ' , [ App Controllers User::class, ' delete ' ]);
// The router allows you to register routes that respond to any HTTP verb:
Route:: any ( ' / ' , function () {
// ...
});
// Sometimes you may need to register a route that responds to multiple HTTP verbs:
Route:: match ([ " GET " , " POST " ], " / " , function () {
// ...
});
方法:
功能 | 範圍 |
---|---|
姓名 | 字串$名稱 |
到 | 字串$名稱 |
例子:
Route:: get ( " /users/create " , function () {
// ...
})-> name ( " user.create " );
Route:: get ( " /users/2 " , function () {
// ...
})-> as ( " user.show " );
Route:: get ( " / " , function () {
// ...
})-> name ( " web.index " );
Route:: get ( " /user/{id} " , function ( $ id ) {
echo $ id ;
})-> name ( " user.show " );
Route:: get ( " /post/{id?} " , function ( $ id ) {
if (! $ id ) {
// ...
}
// ...
})-> name ( " post.show " );
方法:
功能 | 範圍 | 範圍 |
---|---|---|
在哪裡 | 數組 $params | |
其中參數 | 字串 $param | 字串$正規表示式 |
其中編號 | 字串 $param | |
其中阿爾法 | 字串 $param | |
其中字母數字 | 字串 $param | |
所在位置 | 字串 $param |
例子:
Route:: get ( " /user/{id} " , [ App Controllers UserController::class, " show " ])
-> name ( " user.show " )
-> where ([ " id " => " [0-9]+ " ]);
// whereParam is alias of where method
Route:: get ( " /profile/{slug} " , [ App Controllers UserController::class, " profile " ])
-> name ( " user.profile " )
-> whereParam ( " id " , " [0-9]+ " );
Route:: get ( " /book/{id} " , [ App Controllers BookController::class, " show " ])
-> name ( " book.show " )
-> whereNumber ( " id " );
在這裡使用中間件非常簡單,我們只需要傳遞類別的全名或將它們設為全域,然後我們使用它們的別名。
注意:將所有路線放置在下面非常重要。此類之上的路由不會將這些中間件作為全域的。
Route:: globalMiddlewares ([
' isLogged ' => App Middlewares isLogged::class,
' isAdmin ' => App Middlewares isAdmin::class
]);
// ... all routes
您可以使用 middleware 方法將中介軟體指派給路由。
Route:: get ( " /musics " , function () {
// ...
})-> middleware ( " isLogged " );
Route:: get ( " /musics " , function () {
// ...
})-> middleware ([ " isLogged " ]);
您可以透過將中間件名稱陣列傳遞給中間件方法來將多個中間件指派給路由。
Route:: get ( " /musics " , function () {
// ...
})-> middleware ( " first, second " );
Route:: get ( " /movies " , function () {
// ...
})-> middleware ([ " first " , " second " ]);
指派中間件時,您也可以傳遞完全限定的類別名稱:
use App Middlewares VerifyCsrfToken ;
Route:: get ( " /series " , function () {
// ...
})-> middleware (VerifyCsrfToken::class);
Route:: get ( " /series " , function () {
// ...
})-> middleware ( App Middlewares VerifyCsrfToken::class);
有時您會使用中間件建立一組路由,但您只希望一個或幾個路由沒有特定的中間件,您可以這樣做。
Route:: middleware ([ ' auth ' , ' api ' ])-> group ( function () {
Route:: get ( ' / ' , function () {
// All middlewares will works in this route
});
Route:: get ( ' /no-api ' , function () {
// Only the auth middleware works here
})-> withoutMiddleware ( ' api ' );
});
所有方法:
功能 | 範圍 | ::功能 | ->功能 |
---|---|---|---|
名稱空間 | 字串$命名空間 | 是的 | 是的 |
前綴 | 字串$前綴 | 是的 | 是的 |
姓名 | 字串$名稱 | 是的 | 是的 |
中介軟體 | 字串$中間件 | 是的 | 是的 |
組方法可以以靜態方式或普通方式調用,不要忘記調用函數組以作為路由插入閉包內。
範例:
Route:: name ( " admin. " )-> group ( function () {
Route:: get ( " / " , function () {
// admin.index
})-> name ( " index " );
});
Route:: prefix ( " admin/ " )-> group ( function () {
Route:: get ( " /index " , function () {
// http://localhost/admin/index
})-> name ( " index " );
});
Route:: namespace ( " AppControllers " )-> group ( function () {
Route:: get ( " /user/{id} " , [ " User " , " show " ])-> name ( " show " );
// AppControllersUser
});
Route:: middleware ( App Middlewares isLogged::class)-> group ( function () {
Route:: get ( " /user/{id} " , [ " User " , " show " ])-> name ( " show " );
});
Route:: namespace ( " AppControllersAdmin " )
-> middleware ([ " isLogged " , " isAdmin " ])
-> name ( " admin. " )
-> prefix ( " admin " )
-> group ( function () {
// ...
});
您可以將路由與路由組中的各個中間件一起使用。
Route:: namespace ( " isLogged " )-> group ( function () {
Route:: get ( " /posts " , function () {
// ...
})-> middleware ( " isAdmin " );
// ...
});
也許您想要一條忽略群組名稱的路由,您可以使用 name 方法的第二個參數。
Route:: name ( " admin. " )-> group ( function () {
Route:: get ( " /posts " , function () {
// name: app.posts
})-> name ( " app.posts " , true );
});
方法:
功能 | 範圍 | 範圍 | 範圍 |
---|---|---|---|
重定向 | 字串 $uri | 字串$重定向 | 整數 $statusCode = 302 |
永久重定向 | 字串 $uri | 字串$重定向 |
例子:
// Returns 302 status code by default.
Route:: redirect ( " /here " , " /there " );
Route:: redirect ( " /here " , " /there " , 301 );
// permanentRedirect always returns 301
Route:: permanentRedirect ( " /here " , " /there " );
// You can return an existing route
Route:: redirect ( " /index " , " web.index " );
當沒有使用該 url 位址註冊的路由時,將由後備路由負責。當使用者沒有請求任何路由時,就會呼叫回退路由。
Route:: fallback ( function () {
echo ' Route error! ' ;
// ...
});
注意:如果您想重定向到現有路由,請小心,如果它包含動態參數,它將傳回整個正規表示式並會導致錯誤。
請小心重定向到現有路由,因為如果它具有動態參數,它將傳回整個正規表示式並傳回錯誤。
每次呼叫路由以及呼叫 Closure 或控制器方法時,您都會將 minasrouter HttpRequest 的實例作為參數。如果路由有動態參數(強製或可選),則需要在接收 Request 實例之前傳遞它們。
功能 | 範圍 | 範圍 |
---|---|---|
取得參數 | ||
小路 | ||
網址 | ||
完整網址 | ||
標頭 | 字串 $header | 字串$預設值 |
有標題 | 字串 $header | |
ip | ||
詢問 | ?字串$查詢 | ?字串$預設值 |
全部 | ?字串$例外 | |
獲取方法 | ||
方法 | 字串 $expectedMethod |
路由的動態參數直接與Request實例一起傳入方法中。
例子:
use minasrouter Http Request ;
Route:: get ( " / " , function ( Request $ request )) {
// ...
});
Route:: get ( " /user/{id} " , function ( $ id , Request $ request )) {
// ...
});
Route:: get ( " /posts/{slug?} " , function ( $ slug , Request $ request )) {
// ...
});
Route:: get ( " /book/{slug} " , function ( $ slug , Request $ request ) {
// Retrieving all dynamic parameters
print_r ( $ request -> getParams ());
});
Request 方法是包含所有表單資料、查詢參數、動態路由參數和整個請求標頭的方法。
path方法傳回請求的路徑資訊。因此,如果傳入請求的目標是http://localhost/foo/bar ,則 path 方法將傳回foo/bar :
$ uri = $ request -> path ();
若要檢索傳入請求的完整 URL,您可以使用url或fullUrl方法。 url方法將傳回不帶查詢字串的 URL,而fullUrl方法包含查詢字串:
$ url = $ request -> url ();
$ urlWithQueryString = $ request -> fullUrl ();
您可以使用 header 方法從 minasrouter HttpRequest實例檢索請求標頭。如果請求中不存在標頭,則將傳回 null。但是, header 方法接受可選的第二個參數,如果請求中不存在標頭,則會傳回該參數:
$ value = $ request -> header ( " Header-Name " );
$ value = $ request -> header ( " Header-Name " , " default " );
hasHeader方法可用於確定請求是否包含給定的標頭:
if ( $ request -> hasHeader ( " Header-Name " )) {
// ...
}
bearerToken方法可用於從授權標頭中擷取承載令牌。如果不存在這樣的標頭,則將傳回 null。
$ token = $ request -> bearerToken ();
ip方法可用於擷取向您的網站發出要求的用戶端的 IP 位址:
$ ipAddress = $ request -> ip ();
查詢方法只會從查詢字串中檢索值:
$ id = $ request -> query ( " id " );
如果請求的查詢字串值資料不存在,則將傳回此方法的第二個參數:
$ developer = $ request -> query ( " developer " , " Nicollas " );
您可以呼叫不帶任何參數的查詢方法來檢索所有查詢字串值。
$ query = $ request -> query ();
您可以直接存取 queryString 並輸入數據,這是 Request 類別的屬性。
// http://localhost/?foo=bar
$ foo = $ request -> foo ;
// <input type="text" name="title" value=" minasrouter ">
$ title = $ request -> title ;
您可以使用 all 方法以陣列形式擷取所有傳入要求的輸入資料。無論傳入請求是來自 HTML 表單還是 XHR 請求,都可以使用此方法。如果您想讓某些資料無效,可以將其作為第二個參數傳遞。
$ data = $ request -> all ();
// all, except csrf_token, page
$ data = $ request -> all ( " csrf_token, page " );
getMethod方法將傳回請求的 HTTP 謂詞。您可以使用isMethod方法來驗證 HTTP 謂詞是否與給定字串相符:
$ httpMethod = $ request -> getMethod ();
if ( $ request -> isMethod ( ' POST ' )) {
// ...
}