هيكل جزئي Symfony

المقدمة

لقد اخترنا المصطلحات الفنية التالية باللغة العربية:

- function: مفعّلة

- Terminal: النافذة الأساسية

- Kernel: جوهر

- autoload: تحميل آلي 

- Framework: هيكل

- Microframework: الهيكل الجزئي

- Bundle:  الحزم

- Controller: موجه  

- Routes: مسارات  

- Server: مضيف افتراضي

في هذه المدوّنات سأريكم كيفية إنشاء هيكل الجزئي باستخدام Symfony.

قبل الانغماس في الهيكل الجزئي، من المهم فهم الهيكل وهو هيكل يوفر مجموعة من الأدوات لتسهيل ابتكار التطبيقات. وعادةً ما يتضمن مجموعة من القواعد وأفضل الممارسات التي تساعد على إنشاء تطبيقات عالية الجودة.

يمكن تصنيف الهياكل إلى نوعين: هياكل كاملة  وهياكل جزءية.

توفر الهياكل الكاملة مجموعة من الأدوات لبناء تطبيقات معقدة، بينما تقدم الهيكل الجزئية فقط الأساسيات الضرورية لبناء تطبيقات خفيفة وذات ميزات محدودة.

تعتبر الهياكل الجزئية خفيفة الوزن وسريعة، مما يجعلها مثالية للمشاريع الصغيرة أو النماذج الأولية.

المتطلبات

- PHP

- Composer

التثبيت

أولاً ، نحتاج إلى تثبيت symfony/framework-bundle ومكتبة symfony/runtime باستخدام Composer.

 قم بتشغيل التالي في النافذة الأساسية:

composer require symfony/framework-bundle symfony/runtime

FrameworkBundle تحتوي على مكونات توفر أساسًا لتطبيقات الويب التي يتم إنشاؤها باستخدام Symfony. في حين أن symfony/runtime هي مكتبة توفر بيئة تشغيل بسيطة لتطبيقات Symfony التي تم إنشاؤها باستخدام MicroKernelTrait.

يوفر Symfony/runtime تحميل آلي (autoload) الذي سيكون نقطة الدخول لتطبيقنا.

دعنا ننشئ ملف index.php في مجلد public. في هذا الملف ، نقوم أولاً بطلب ملف autoload من ال runtime كما ذكرنا سابقًا:

<?php require_once __DIR__.'/../vendor/autoload_runtime.php';

يتوقع autoload أن يعيد index.php مفعّلة (Function)  التي تتيح لنا الوصول إلى السياق context الذي تحتوي على متغيرات عامة.

يجب أن تعيد المفعّلة مثيلًا من فئة Symfony\Component\HttpKernel\Kernel.

use Symfony\Component\HttpKernel\Kernel; return static function( array $context ) { $env = $context[ 'APP_ENV' ]; $debug = $context[ 'APP_DEBUG' ]; return new class( $env, $debug) extends Kernel {}

يتوقع الجوهر(Kernel) أن تعرف المفعلات التالية:

registerBundles: هذه المسؤولة عن تسجيل جميع الحزم التي ستستخدم في تطبيقنا. يتم تسجيل الحزم عادة في ملف config/bundles.php، ولكن في حالتنا سنقوم بتسجيل الحزم على نفس الملف.

registerContainerConfiguration: تُستخدم لتسجيل إعدادات الحزم. تكون هذه ملفات عادة YAML أو XML وتقع في config/.

يمكننا استخدام MicroKernelTrait حيث يوفر لنا كل من المفعلات، وسنقوم بالتعديل على registerBundles لتسجيل حزمة Symfony FrameworkBundle.

return new class( $env, $debug) extends Kernel { use MicroKernelTrait; public function registerBundles(): iterable { yield new FrameworkBundle(); } }

يتطلب FrameWorkBundle سرًا واحدًا فقط، ويتم استخدام هذا السر لأسباب أمنية مثل إنشاء رموز CSRF. يجب علينا تكوينه باستخدام configureContainer:

public function configureContainer( ContainerConfigurator $configurator ): void { $configurator->extension( 'framework', [ 'secret' => '123456789' ] ); }

موجه المسارات  

في هذه المرحلة لدينا تطبيق Symfony. يجب علينا البدء في إنشاء موجه المسارات، وفي حالتنا سنقوم بتعريف مسار متحرك يتطلب رقمًا في المسار:

public function configureRoutes( RoutingConfigurator $configurator ): void { $configurator->add( 'app_home', '/{number}' )->controller( [ $this, 'homeAction' ] ); } public function homeAction( int $number, Request $request ): Response { return new JsonResponse( [ 'success' => true, 'providedNumber' => $number ] ); }

وهذا كل شيء، يجب الآن تشغيل الأمر التالي لتشغيل مضيف افتراضي محلي ثم فتح المتصفح المفضل لديك والانتقال إلى localhost:8000/1234:

php -S localhost:8000 -t public/index.php

وتكون النتيجة:

{ "success": true, "providedNumber": 1234 }