يمكنك استخدام تطبيق الهيكل العظمي هذا لبدء العمل على تطبيق New Embryo Framework 3.
باستخدام الملحن:
$ composer create-project davidecesarano/embryo [my-app-name]
يستخدم الجنين مكتبة DOTENV PHP. في تثبيت الجنين الطازج ، سيحتوي الدليل الجذر على التطبيق الخاص بك على ملف .env.example . عند تثبيت الجنين عبر الملحن ، سيتم إعادة تسمية هذا الملف تلقائيًا إلى .env .
| دليل | وصف |
|---|---|
| برنامج | يحتوي على الكود الأساسي لتطبيقك. يحتوي هذا الدليل على مجموعة متنوعة من الدلائل الإضافية مثل Controllers Exceptions Helpers Middleware Models Services . |
| bootstrap | يحتوي على الملفات التي تضع تطبيقك مثل تطبيق تطبيق التطبيق والوسائط والخدمات والإعدادات. |
| عام | يحتوي على نقطة الدخول لجميع الطلبات (ملف 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 الطرق باستخدام طرق توجيه مثيل التطبيق. تسجل طرق المثيل هذه مسارًا باستخدام كائن جهاز توجيه التطبيق. تقوم كل طريقة توجيه بإرجاع مثيل الطريق حتى تتمكن من استدعاء طرق مثيل Route على الفور لإضافة البرامج الوسيطة أو تعيين اسم.public/index.php استدعاء طريقة run() مثيل التطبيق. تبدأ هذه الطريقة العملية التالية:يدعم Embryo واجهات PSR-7 لطلبها وكائنات الاستجابة.
يمكنك تشغيل الرمز قبل وبعد تطبيق الجنين الخاص بك لمعالجة كائنات الطلب والاستجابة كما ترى مناسبة. وهذا ما يسمى الوسيطة. يقوم الوسيطة بتنفيذ واجهة PSR-15 الوسيطة.
يستخدم Embryo حاوية التبعية لإعداد تبعيات التطبيق وإدارتها وحقنها. يدعم الجنين الحاويات التي تنفذ 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 جديد ، فأضفه في دليل Routes وقم بتسجيله في طريقة 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() .
يمكنك كتابة أي تبعيات قد تحتاجها وحدة التحكم الخاصة بك في مُنشئها. سيتم حل التبعيات المعلنة تلقائيًا وحقنها في مثيل وحدة التحكم:
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() PSR-7 و 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 تطبيقات الجنين. تطبيقك الخاص ، بالإضافة إلى جميع الخدمات الأساسية لـ Mermryo ، يتم الحصول عليها من خلال مزودي الخدمة.
عصر مقدمي الخدمات الموجود في دليل 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 ' ;
});
}
}