Anda dapat menggunakan aplikasi kerangka ini untuk mulai mengerjakan aplikasi embrio Framework 3 baru.
Menggunakan komposer:
$ composer create-project davidecesarano/embryo [my-app-name]
Embrio menggunakan pustaka PHP dotenv. Dalam instalasi embrio baru, direktori root aplikasi Anda akan berisi file .env.example . Saat Anda menginstal embrio melalui komposer, file ini akan secara otomatis diganti namanya menjadi .env .
| Direktori | Keterangan |
|---|---|
| aplikasi | Berisi kode inti aplikasi Anda. Direktori ini berisi berbagai direktori tambahan seperti Controllers , Exceptions , Helpers , Middleware , Models dan Services . |
| Bootstrap | Berisi file yang bootstrap aplikasi Anda seperti instantiasi aplikasi, middleware, layanan dan pengaturan. |
| publik | Berisi titik masuk untuk semua permintaan (file index.php ) dan direktori assets . |
| rute | Berisi semua definisi rute untuk aplikasi Anda. Secara default, beberapa file rute disertakan dengan embrio: app.php dan api.php . |
| penyimpanan | Berisi log Anda ( logs ), file templat yang dikompilasi ( views ), sesi berbasis file ( sessions ), file cache ( cache ). |
| terjemahan | Berisi file bahasa Anda. |
| tampilan | Berisi file tampilan. |
bootstrap/app.php dengan kelas EmbryoApplication . Selama instantiasi, embrio mendaftarkan layanan untuk dependensi ( bootstrap/services.php ), middlewares ( bootstrap/middleware.php ) dan file rute (dalam direktori routes ). Konstruktor aplikasi menerima array pengaturan opsional yang mengonfigurasi perilaku aplikasi ( bootstrap/settings.php ).routes direcotry menentukan rute menggunakan metode perutean instance aplikasi. Metode instan ini mendaftarkan rute dengan objek router aplikasi. Setiap metode perutean mengembalikan instance rute sehingga Anda dapat segera memohon metode instance rute untuk menambahkan middleware atau menetapkan nama.run() Metode public/index.php . Metode ini memulai proses berikut:Embrio mendukung antarmuka PSR-7 untuk objek permintaan dan responsnya.
Anda dapat menjalankan kode sebelum dan sesudah aplikasi embrio Anda untuk memanipulasi objek permintaan dan respons sesuai keinginan Anda. Ini disebut middleware. Middleware mengimplementasikan antarmuka middleware PSR-15.
Embrio menggunakan wadah ketergantungan untuk menyiapkan, mengelola, dan menyuntikkan ketergantungan aplikasi. Embrio mendukung kontainer yang mengimplementasikan PSR-11.
Anda dapat mendefinisikan rute aplikasi menggunakan metode perutean instance aplikasi. Setiap metode menerima dua argumen:
class@method atau array ['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 );
} Dukungan perutean embrio dapatkan, posting, put, tambalan, hapus dan metode permintaan opsi. Setiap metode permintaan sesuai dengan metode objek router: get() , post() , put() , patch() , delete() dan options() . Anda dapat menggunakan metode all() dan map() untuk mendukung semua metode atau metode rute tertentu.
Lihat Dokumentasi Lengkap: Routing Embrio.
Semua rute embrio didefinisikan dalam file rute Anda, yang terletak di direktori routes . File -file ini secara otomatis dimuat oleh aplikasi Anda di file boostrap/app.php . Jika Anda ingin membuat file ruote baru, tambahkan di direktori rute dan daftarkan di metode import() dari instance aplikasi di file 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 ' )
]); Dalam embrio Anda dapat membuat middleware PSR-15 di Direktori appMiddleware . Anda dapat menambahkan middleware ke aplikasi, ke rute tertentu atau ke grup rute.
Jika Anda ingin mendaftar Middleware untuk setiap permintaan HTTP, tambahkan middleware aplikasi di bootstrapmiddleware.php . Metode addMiddleware() menerima string, array atau instance PsrHttpServerMiddlewareInterface .
$ app -> addMiddleware ( App Middleware MyCustomMiddleware::class); Anda dapat menggunakan metode middleware() untuk menetapkan satu atau lebih middleware di rute. Metode middleware() menerima string, array atau instance dari PsrHttpServerMiddlewareInterface .
$ app -> get ( ' /users ' , function ( ServerRequest $ request , Response $ response ) {
//...
})-> middleware ( ' AppMiddlewareTestMiddleware1::class ' , ' AppMiddlewareTestMiddleware2::class ' ); Selain rute, Anda dapat menetapkan satu atau lebih middleware ke grup dan ke rute individual dalam grup. Metode middleware() menerima string, array atau instance dari 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);
});Alih -alih mendefinisikan semua permintaan penanganan logika Anda sebagai penutupan dalam file rute Anda, Anda mungkin ingin mengatur perilaku ini menggunakan kelas "controller". Mari kita lihat contoh pengontrol dasar. Perhatikan bahwa pengontrol memperluas kelas pengontrol dasar yang disertakan dengan embrio:
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 );
}
}Anda dapat mendefinisikan rute ke metode pengontrol ini seperti:
use App Controllers UserController ;
$ app -> get ( ' /user/{id} ' , [UserController::class, ' show ' ]); Pengontrol diminta untuk memperpanjang kelas dasar. Namun, Anda tidak akan memiliki akses ke fitur seperti metode get() , request() dan response() .
Anda dapat mengetikkan ketergantungan apa pun yang mungkin dibutuhkan pengontrol Anda dalam konstruktornya. Ketergantungan yang dinyatakan secara otomatis akan diselesaikan dan disuntikkan ke instance controller:
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 ;
}
}Selain injeksi konstruktor, Anda juga dapat mengetikkan ketergantungan pada metode pengontrol Anda:
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message ServerRequest ;
class UserController extends Controller
{
/**
* @param ServerRequest $request
*/
public function store ( ServerRequest $ request )
{
//...
}
} Selain itu, Anda juga dapat menggunakan metode get() dari kelas pengontrol dasar:
namespace App Controllers ;
use Embryo Controller ;
use Path To Service ;
class UserController extends Controller
{
public function show ()
{
$ service = $ this -> get (Service::class);
//...
}
} Kelas pengontrol dasar juga memiliki akses ke metode PSR-7 request() dan 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! ' );
}
} Atau, Anda dapat mengakses pembantu request() dan 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! ' );
}
}Penyedia layanan adalah tempat utama dari semua bootstrap aplikasi embrio. Aplikasi Anda sendiri, serta semua layanan inti Embrio, dibooting melalui penyedia layanan.
Era Penyedia Layanan yang berlokasi di Direktori app/Services . Semua penyedia layanan memperluas kelas EmbryoContainerServiceProvider dan berisi metode register . Dalam metode register, Anda hanya harus mengikat hal -hal ke dalam wadah layanan.
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 ' ;
});
}
}