คุณสามารถใช้แอปพลิเคชันโครงกระดูกนี้เพื่อเริ่มทำงานกับแอปพลิเคชันตัวอ่อนใหม่ Framework 3
ใช้นักแต่งเพลง:
$ composer create-project davidecesarano/embryo [my-app-name]
ตัวอ่อนใช้ห้องสมุด DOTENV PHP ในการติดตั้งตัวอ่อนสดไดเรกทอรีรากของแอปพลิเคชันของคุณจะมีไฟล์. .env.example เมื่อคุณติดตั้งตัวอ่อนผ่านนักแต่งเพลงไฟล์นี้จะถูกเปลี่ยนชื่อเป็น .env โดยอัตโนมัติ
| ไดเรกทอรี | คำอธิบาย |
|---|---|
| แอป | มีรหัสหลักของแอปพลิเคชันของคุณ ไดเรกทอรีนี้มีไดเรกทอรีเพิ่มเติมที่หลากหลายเช่น Controllers Exceptions Helpers Middleware Models และ Services |
| รองเท้าบู๊ต | มีไฟล์ที่ bootstraps แอปพลิเคชันของคุณเช่นการสร้างอินสแตนซ์แอพมิดเดิลแวร์บริการและการตั้งค่า |
| สาธารณะ | มีจุดเริ่มต้นสำหรับคำขอทั้งหมด ( index.php ไฟล์) และไดเรกทอรี assets |
| เส้นทาง | มีคำจำกัดความเส้นทางทั้งหมดสำหรับแอปพลิเคชันของคุณ โดยค่าเริ่มต้นไฟล์เส้นทางหลายไฟล์จะรวมอยู่ในตัวอ่อน: app.php และ api.php |
| พื้นที่จัดเก็บ | มีบันทึกของคุณ ( logs ), ไฟล์เทมเพลตที่รวบรวม ( views ), เซสชันที่ใช้ไฟล์ ( sessions ), ไฟล์แคช ( cache ) |
| การแปล | มีไฟล์ภาษาของคุณ |
| มุมมอง | มีไฟล์มุมมอง |
bootstrap/app.php ด้วยคลาส EmbryoApplication ในระหว่างการสร้างอินสแตนซ์ตัวอ่อนลงทะเบียนบริการสำหรับการพึ่งพา ( bootstrap/services.php ), middlewares ( bootstrap/middleware.php ) และเส้นทางไฟล์ (ในไดเรกทอรี routes ) ตัวสร้างแอปพลิเคชันยอมรับอาร์เรย์การตั้งค่าที่เป็นตัวเลือกที่กำหนดค่าพฤติกรรมของแอปพลิเคชัน ( bootstrap/settings.php )routes direcotry กำหนดเส้นทางโดยใช้วิธีการกำหนดเส้นทางของแอปพลิเคชันอินสแตนซ์ วิธีการอินสแตนซ์เหล่านี้ลงทะเบียนเส้นทางด้วยวัตถุเราเตอร์ของแอปพลิเคชัน แต่ละวิธีการกำหนดเส้นทางส่งคืนอินสแตนซ์เส้นทางเพื่อให้คุณสามารถเรียกใช้วิธีการของอินสแตนซ์เส้นทางทันทีเพื่อเพิ่มมิดเดิลแวร์หรือกำหนดชื่อpublic/index.php เรียกใช้วิธี run() ของแอปพลิเคชัน วิธีนี้เริ่มต้นกระบวนการต่อไปนี้:ตัวอ่อนรองรับอินเทอร์เฟซ PSR-7 สำหรับวัตถุคำขอและการตอบสนอง
คุณสามารถเรียกใช้รหัสก่อนและหลังแอปพลิเคชันตัวอ่อนของคุณเพื่อจัดการกับคำขอและการตอบสนองวัตถุตามที่คุณเห็น FIT สิ่งนี้เรียกว่ามิดเดิลแวร์ มิดเดิลแวร์ใช้อินเทอร์เฟซมิดเดิลแวร์ PSR-15
ตัวอ่อนใช้คอนเทนเนอร์การพึ่งพาเพื่อเตรียมจัดการและฉีดพึ่งพาแอปพลิเคชัน ตัวอ่อนรองรับคอนเทนเนอร์ที่ใช้ PSR-11
คุณสามารถกำหนดเส้นทางแอปพลิเคชันโดยใช้วิธีการกำหนดเส้นทางของแอปพลิเคชัน ทุกวิธียอมรับข้อโต้แย้งสองข้อ:
class@method หรืออาร์เรย์ ['class', 'method'] ) use Embryo Http Message { Response , ServerRequest };
// GET Route
$ app ->get( ' /blog/{id} ' , function ( ServerRequest $ request , Response $ response , int $ id ) {
return $ response -> write ( ' This is post with id ' . $ id );
} การกำหนดเส้นทางตัวอ่อนรองรับได้รับโพสต์ใส่แพทช์ลบและวิธีการขอตัวเลือก ทุกวิธีการร้องขอสอดคล้องกับวิธีการของวัตถุเราเตอร์: get() , post() , put() , patch() , delete() และ options() คุณสามารถใช้วิธีการ all() และ map() สำหรับการสนับสนุนวิธีการทั้งหมดหรือวิธีการเส้นทางเฉพาะ
ดูเอกสารฉบับเต็ม: การกำหนดเส้นทางตัวอ่อน
เส้นทางตัวอ่อนทั้งหมดถูกกำหนดไว้ในไฟล์เส้นทางของคุณซึ่งอยู่ในไดเรกทอรี routes ไฟล์เหล่านี้จะถูกโหลดโดยอัตโนมัติโดยแอปพลิเคชันของคุณในไฟล์ boostrap/app.php หากคุณต้องการสร้างไฟล์ Ruote ใหม่ให้เพิ่มในไดเรกทอรีเส้นทางและลงทะเบียนใน import() ของอินสแตนซ์แอปพลิเคชันในไฟล์ boostrap/app.php :
$ app -> import ([
root_path ( ' bootstrap/services.php ' ),
root_path ( ' bootstrap/middleware.php ' ),
root_path ( ' routes/api.php ' ),
root_path ( ' routes/app.php ' ),
root_path ( ' routes/my_route_file.php ' )
]); ในตัวอ่อนคุณสามารถสร้างมิดเดิลแวร์ PSR-15 ในไดเรกทอรี appMiddleware คุณสามารถเพิ่มมิดเดิลแวร์ลงในแอปพลิเคชันไปยังเส้นทางที่เฉพาะเจาะจงหรือไปยังกลุ่มเส้นทาง
หากคุณต้องการลงทะเบียนมิดเดิลแวร์สำหรับคำขอ HTTP ทุกครั้งให้เพิ่มแอปพลิเคชันมิดเดิลแวร์ใน bootstrapmiddleware.php วิธี addMiddleware() ยอมรับสตริงอาร์เรย์หรืออินสแตนซ์ของ PsrHttpServerMiddlewareInterface
$ app -> addMiddleware ( App Middleware MyCustomMiddleware::class); คุณสามารถใช้เมธอด middleware() เพื่อกำหนดมิดเดิลแวร์หนึ่งตัวขึ้นไปที่เส้นทาง เมธอด middleware() ยอมรับสตริงอาร์เรย์หรืออินสแตนซ์ของ PsrHttpServerMiddlewareInterface
$ app -> get ( ' /users ' , function ( ServerRequest $ request , Response $ response ) {
//...
})-> middleware ( ' AppMiddlewareTestMiddleware1::class ' , ' AppMiddlewareTestMiddleware2::class ' ); นอกเหนือจากเส้นทางแล้วคุณสามารถกำหนดมิดเดิลแวร์หนึ่งตัวขึ้นไปให้กับกลุ่มและเส้นทางแต่ละเส้นทางภายในกลุ่ม เมธอด middleware() ยอมรับสตริงอาร์เรย์หรืออินสแตนซ์ของ PsrHttpServerMiddlewareInterface
$ app -> prefix ( ' /api ' )-> middleware ( App Middleware GroupMiddlewareTest::class)-> group ( function ( $ app ) {
$ app -> get ( ' /user/{id} ' , function ( ServerRequest $ request , Response $ response , int $ id ) {
//...
})-> middleware ( App Middleware RouteMiddlewareTest::class);
});แทนที่จะกำหนดตรรกะการจัดการคำขอทั้งหมดของคุณเป็นการปิดไฟล์เส้นทางของคุณคุณอาจต้องการจัดระเบียบพฤติกรรมนี้โดยใช้คลาส "คอนโทรลเลอร์" ลองมาดูตัวอย่างของคอนโทรลเลอร์พื้นฐาน โปรดทราบว่าคอนโทรลเลอร์ขยายคลาสคอนโทรลเลอร์พื้นฐานที่มาพร้อมกับตัวอ่อน:
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message Response ;
class UserController extends Controller
{
/**
* @param int $id
* @return Response
*/
public function show ( int $ id ): Response
{
return $ this -> response ()-> write ( $ id );
}
}คุณสามารถกำหนดเส้นทางไปยังวิธีคอนโทรลเลอร์นี้ได้เช่น:
use App Controllers UserController ;
$ app -> get ( ' /user/{id} ' , [UserController::class, ' show ' ]); ตัวควบคุมจะ ต้องมี การขยายคลาสฐาน อย่างไรก็ตามคุณจะไม่สามารถเข้าถึงคุณสมบัติเช่นวิธีการ get() , request() และ response()
คุณสามารถพิมพ์ HINT การพึ่งพาตัวควบคุมของคุณอาจต้องการในตัวสร้าง การพึ่งพาที่ประกาศจะได้รับการแก้ไขและฉีดลงในอินสแตนซ์คอนโทรลเลอร์โดยอัตโนมัติ:
namespace App Controllers ;
use Embryo Controller ;
use Path To Service ;
class UserController extends Controller
{
/**
* @var Service $service
*/
private $ service ;
/**
* @param Service $service
*/
public function __construct ( Service $ service )
{
$ this -> service = $ service ;
}
}นอกเหนือจากการฉีดคอนสตรัคเตอร์แล้วคุณยังสามารถพิมพ์เฉพาะการพึ่งพาวิธีการของคอนโทรลเลอร์ของคุณ:
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message ServerRequest ;
class UserController extends Controller
{
/**
* @param ServerRequest $request
*/
public function store ( ServerRequest $ request )
{
//...
}
} นอกจากนี้คุณยังสามารถใช้วิธี get() ของคลาสคอนโทรลเลอร์ฐาน:
namespace App Controllers ;
use Embryo Controller ;
use Path To Service ;
class UserController extends Controller
{
public function show ()
{
$ service = $ this -> get (Service::class);
//...
}
} คลาสคอนโทรลเลอร์ฐานยังสามารถเข้าถึงวิธี request() และ response() :
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message Response ;
class UserController extends Controller
{
/**
* @return Response
*/
public function store (): Response
{
$ params = $ this -> request ()-> getParsedBody ();
//...
return $ this -> response ()-> write ( ' Hello! ' );
}
} หรือคุณอาจเข้าถึง request() และ response() ผู้ช่วย:
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message Response ;
class UserController extends Controller
{
/**
* @return Response
*/
public function store (): Response
{
$ params = request ()-> getParsedBody ();
return response ()-> write ( ' Hello! ' );
}
}ผู้ให้บริการเป็นสถานที่สำคัญของแอปพลิเคชันตัวอ่อนทั้งหมด bootstrapping แอปพลิเคชันของคุณเองรวมถึงบริการหลักของตัวอ่อนทั้งหมดถูกบูตผ่านผู้ให้บริการ
ยุคผู้ให้บริการที่อยู่ในไดเรกทอรี app/Services ผู้ให้บริการทั้งหมดขยายคลาส EmbryoContainerServiceProvider และมีวิธี register ภายในวิธีการลงทะเบียนคุณควรผูกสิ่งต่าง ๆ ไว้ในคอนเทนเนอร์บริการเท่านั้น
namespace App Services ;
use Embryo Container ServiceProvider ;
class TestService extends ServiceProvider
{
/**
* Registers service provider.
*
* @return void
*/
public function register ()
{
$ this -> container -> set ( ' test ' , function ( $ container ){
return ' Hello from my test service ' ;
});
}
}