ง่าย รวดเร็วและใช้งานได้ดีมาก minasrouter เป็นส่วนประกอบเส้นทาง PHP สำหรับโครงการ MVC! มันถูกสร้างมาเพื่อสรุปคำกริยา RESTfull
(GET, POST, PUT, PATCH, DELETE)
และเรนเดอร์ด้วยวิธีที่ง่ายและสะดวกในตัวควบคุมแอปพลิเคชัน
minasrouter
ทำงานและประมวลผลข้อมูลทั้งหมดแบบแยกส่วน ทำให้กระบวนการง่ายขึ้นสำหรับนักพัฒนา และเร่งการพัฒนา/ความคืบหน้าของโครงการ
ง่าย รวดเร็วและใช้งานได้ดีมาก minasrouter เป็นส่วนประกอบเส้นทาง PHP สำหรับโครงการ MVC! ได้รับการออกแบบมาเพื่อสรุปคำกริยา RESTfull (GET, POST, PUT, PATCH, DELETE) และแสดงผลอย่างง่ายดายและง่ายดายในตัวควบคุมแอปพลิเคชัน
minasrouter ทำงานและประมวลผลข้อมูลทั้งหมดแบบแยกส่วน อำนวยความสะดวกให้กับกระบวนการสำหรับนักพัฒนา และเร่งการพัฒนา/ความคืบหน้าของโครงการ
(Yes, it really is a few minutes)
ด้วย สองสาย คุณเริ่มใช้เส้นทาง!
บางทีคุณอาจเป็นคนที่เรียนรู้จากการดู คุณสามารถเข้าถึงโฟลเดอร์ตัวอย่างซึ่งมีตัวอย่างสถาปัตยกรรมโฟลเดอร์ของวิธีที่เราใช้ 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 () {
// ...
});
วิธีการ:
การทำงาน | พารามิเตอร์ |
---|---|
ชื่อ | สตริง $name |
ไปที่ | สตริง $name |
ตัวอย่าง:
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 | สตริง $regex |
โดยที่หมายเลข | สตริง $param | |
โดยที่อัลฟ่า | สตริง $param | |
โดยที่AlphaNumeric | สตริง $param | |
ที่Uuid | สตริง $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
คุณอาจใช้วิธีการมิดเดิลแวร์เพื่อกำหนดมิดเดิลแวร์ให้กับเส้นทาง
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 ' );
});
วิธีการทั้งหมด:
การทำงาน | พารามิเตอร์ | ::การทำงาน | ->ฟังก์ชั่น |
---|---|---|---|
เนมสเปซ | สตริง $namespace | ใช่ | ใช่ |
คำนำหน้า | สตริงคำนำหน้า $ | ใช่ | ใช่ |
ชื่อ | สตริง $name | ใช่ | ใช่ |
มิดเดิลแวร์ | สตริง $middlewares | ใช่ | ใช่ |
วิธีการกลุ่มอาจเรียกว่าวิธีคงที่หรือปกติก็ได้ อย่าลืมเรียกกลุ่มฟังก์ชัน เพื่อแทรกเป็นเส้นทางภายในการปิด
ตัวอย่าง:
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 " );
// ...
});
บางทีคุณอาจต้องการเส้นทางที่คุณละเว้นชื่อกลุ่ม คุณสามารถใช้พารามิเตอร์ตัวที่สองของวิธีการชื่อสำหรับสิ่งนั้นได้
Route:: name ( " admin. " )-> group ( function () {
Route:: get ( " /posts " , function () {
// name: app.posts
})-> name ( " app.posts " , true );
});
วิธีการ:
การทำงาน | พารามิเตอร์ | พารามิเตอร์ | พารามิเตอร์ |
---|---|---|---|
เปลี่ยนเส้นทาง | สตริง $uri | สตริง $redirect | Int $statusCode = 302 |
การเปลี่ยนเส้นทางถาวร | สตริง $uri | สตริง $redirect |
ตัวอย่าง:
// 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! ' ;
// ...
});
หมายเหตุ: โปรดใช้ความระมัดระวังหากคุณต้องการเปลี่ยนเส้นทางไปยังเส้นทางที่มีอยู่ หากมีอาร์กิวเมนต์แบบไดนามิก เส้นทางนั้นจะส่งคืน regex ทั้งหมดและจะทำให้เกิดข้อผิดพลาด
โปรดใช้ความระมัดระวังเมื่อคุณเปลี่ยนเส้นทางไปยังเส้นทางที่มีอยู่ เพราะหากมีอาร์กิวเมนต์แบบไดนามิก เส้นทางนั้นจะส่งคืน regex ทั้งหมดและแสดงข้อผิดพลาด
แต่ละครั้งที่มีการเรียกเส้นทางและเรียกใช้เมธอดการปิดหรือตัวควบคุม คุณจะมีพารามิเตอร์อินสแตนซ์ของ minasrouter HttpRequest หากเส้นทางมีพารามิเตอร์ไดนามิก (บังคับหรือเป็นทางเลือก) จะต้องผ่านพารามิเตอร์เหล่านั้นก่อนจึงจะได้รับอินสแตนซ์คำขอ
การทำงาน | พารามิเตอร์ | พารามิเตอร์ |
---|---|---|
รับพารามิเตอร์ | ||
เส้นทาง | ||
URL | ||
URL แบบเต็ม | ||
ส่วนหัว | สตริง $header | สตริง $default |
มีHeader | สตริง $header | |
ไอพี | ||
แบบสอบถาม | ?สตริง $แบบสอบถาม | ?สตริง $default |
ทั้งหมด | ?สตริง $ยกเว้น | |
รับวิธีการ | ||
เป็นวิธีการ | สตริง $expectedMethod |
พารามิเตอร์ไดนามิกของเส้นทางจะถูกส่งโดยตรงในวิธีการร่วมกับอินสแตนซ์ของคำขอ
ตัวอย่าง:
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 ());
});
วิธีการขอคือวิธีการที่มีข้อมูลแบบฟอร์ม พารามิเตอร์การสืบค้น พารามิเตอร์เส้นทางแบบไดนามิก และส่วนหัวคำขอทั้งหมดของคุณ
วิธี การเส้นทาง ส่งคืนข้อมูลเส้นทางของการร้องขอ ดังนั้น หากคำขอที่เข้ามากำหนดเป้าหมายไปที่ http://localhost/foo/bar วิธีการ path จะส่งคืน foo/bar :
$ uri = $ request -> path ();
หากต้องการดึง URL แบบเต็มสำหรับคำขอที่เข้ามา คุณอาจใช้เมธอด url หรือ fullUrl เมธอด url จะส่งกลับ URL โดยไม่มีสตริงการสืบค้น ในขณะที่เมธอด fullUrl จะมีสตริงการสืบค้น:
$ url = $ request -> url ();
$ urlWithQueryString = $ request -> fullUrl ();
คุณสามารถดึงส่วนหัวคำขอจากอินสแตนซ์ minasrouter HttpRequest โดยใช้วิธีส่วนหัว หากไม่มีส่วนหัวในคำขอ ระบบจะส่งคืนค่าว่าง อย่างไรก็ตาม วิธีการส่วนหัวยอมรับอาร์กิวเมนต์ที่สองที่เป็นทางเลือกซึ่งจะถูกส่งกลับหากไม่มีส่วนหัวในคำขอ:
$ value = $ request -> header ( " Header-Name " );
$ value = $ request -> header ( " Header-Name " , " default " );
วิธี การ hasHeader อาจใช้เพื่อตรวจสอบว่าคำขอมีส่วนหัวที่กำหนดหรือไม่:
if ( $ request -> hasHeader ( " Header-Name " )) {
// ...
}
อาจใช้วิธี BearerToken เพื่อดึงโทเค็นผู้ถือจากส่วนหัวการอนุญาต หากไม่มีส่วนหัวดังกล่าว ระบบจะส่งคืนค่าว่าง
$ 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 ;
คุณสามารถดึงข้อมูลอินพุตของคำขอที่เข้ามาทั้งหมดเป็นอาร์เรย์โดยใช้วิธีการทั้งหมด วิธีการนี้อาจใช้ได้ไม่ว่าคำขอที่เข้ามาจะมาจากแบบฟอร์ม 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 ' )) {
// ...
}