إنشاء وتشغيل مشروع Symfony
ما هو Symfony؟
Symfony هو إطار عمل مفتوح المصدر لـ PHP ويب تم إنشاؤه بواسطة SensioLabs، يهدف إلى تقديم مجموعة أدوات قوية ومرنة للمطورين لبناء تطبيقات ويب حديثة. يقدم Symfony وظائف غنية مثل التوجيه، محرك القوالب، معالجة النماذج، المصادقة وغيرها، مما يبسط المهام الشائعة في تطوير الويب.
الميزات والفوائد الرئيسية لـ Symfony
- تصميم معياري: يعتمد Symfony على التصميم المعياري، مما يسمح للمطورين باختيار واستخدام المكونات بناءً على الحاجة.
- أداء عالٍ: من خلال الهندسة المحسّنة وآليات التخزين المؤقت، يقدم Symfony أداءً متميزًا.
- دعم المجتمع القوي: يمتلك مجتمع مطورين كبير ونظام إيكولوجي غني.
- المرونة: يمكن دمج مجموعة متنوعة من المكتبات والإضافات الخارجية، مما يجعله مناسبًا للمشاريع بجميع الأحجام.
- توثيق جيد: يوفر توثيقًا وشروحات مفصلة لمساعدة المطورين على البدء بسرعة.
يمكن أن يساعد Symfony المطورين على بناء تطبيقات ويب عالية الجودة وواجهات برمجة التطبيقات بسرعة، وهو مناسب لمجموعة واسعة من المشاريع بدءًا من التطبيقات الصغيرة إلى الأنظمة الكبيرة.
إنشاء وتشغيل مشروع Symfony باستخدام ServBay
في هذه المقالة، سنستخدم بيئة PHP التي يوفرها ServBay لإنشاء وتشغيل مشروع Symfony. سنستفيد من ميزة "الاستضافة" في ServBay لإعداد خادم ويب وللوصول إلى المشروع عبر تكوين بسيط.
انتباه: إذا كنت مستخدمًا سابقًا لـ NGINX أو Apache
يعتمد ServBay افتراضيًا على Caddy كخادم ويب. للمستخدمين الذين يقومون بالانتقال من NGINX و Apache إلى ServBay، يجب ملاحظة بعض التغييرات الرئيسية:
تكوين Caddy
تم تضمين Caddy ضمن إعدادات ServBay الافتراضية، وقد تم تحسين التكوين وضبطه مسبقًا. يحتاج المطورون فقط إلى إدارة المواقع من خلال ميزة "الاستضافة" في ServBay بدلاً من تعديل ملفات تكوين Caddy يدويًا.
قواعد إعادة الكتابة و .htaccess
في NGINX و Apache، كان المطورون عادةً يكتبون قواعد إعادة الكتابة وملفات .htaccess لمعالجة إعادة كتابة URL ومهام التكوين الأخرى. ومع ذلك، يأتي ServBay مع قواعد Caddy مُعدة مسبقًا، وبالتالي لا يحتاج المطورون لكتابة هذه القواعد بأنفسهم إلا للضرورة.
معرفة المزيد
لمزيد من المعلومات، يرجى الرجوع إلى Rewrite وhtaccess، نقل موقع Apache إلى ServBay، نقل موقع NGINX إلى ServBay.
إنشاء مشروع Symfony
TIP
يوصي ServBay بوضع المواقع في الدليل /Applications/ServBay/www
لسهولة الإدارة.
تثبيت Composer
يأتي ServBay بشكل افتراضي مع Composer مثبت، لذلك ليس هناك حاجة للتثبيت المنفصل.
إنشاء مشروع Symfony
استخدام Composer لإنشاء مشروع Symfony جديد:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app cd servbay-symfony-app composer create-project symfony/website-skeleton .
1
2
3
4الدخول إلى مجلد المشروع
الانتقال إلى مجلد مشروع Symfony الجديد:
bashcd /Applications/ServBay/www/servbay-symfony-app
1
تهيئة التكوين
تكوين متغيرات البيئة
تكوين معلومات اتصال قاعدة البيانات وغيرها من متغيرات البيئة في ملف
.env
. تأكد من إعداد التكوينات التالية بشكل صحيح:APP_ENV=dev APP_SECRET=your_secret_key DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1
2
3
تكوين خادم الويب
استخدام ميزة "الاستضافة" في ServBay للوصول إلى مشروع Symfony عبر خادم ويب. في إعدادات "الاستضافة" في ServBay، قم بإضافة استضافة جديدة:
- الاسم:
My First Symfony Dev Site
- اسم المجال:
servbay-symfony-test.local
- نوع الموقع:
PHP
- إصدار PHP: اختر
8.3
- دليل جذر الموقع:
/Applications/ServBay/www/servbay-symfony-app/public
لمزيد من التفاصيل حول إعداد الخطوات، يرجى مراجعة إضافة الموقع الأول.
إضافة كود تجريبي
إضافة الكود التالي في ملف config/routes.yaml
لطباعة "Hello ServBay!":
index:
path: /
controller: App\Controller\DefaultController::index
2
3
إضافة الكود التالي في ملف src/Controller/DefaultController.php
:
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController
{
/**
* @Route("/", name="index")
*/
public function index(): Response
{
return new Response('Hello ServBay!');
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
زيارة الموقع
افتح المتصفح وزر https://servbay-symfony-test.local
، سترى الصفحة تعرض Hello ServBay!
.
مثال لقواعد بيانات NoSQL
مثال Memcached
تثبيت ملحق Memcached
يتم تثبيت ملحق Memcached مسبقًا في ServBay، لا حاجة للتثبيت الإضافي.
تكوين Memcached
تكوين معلومات اتصال Memcached في ملف
.env
:CACHE_DRIVER=memcached MEMCACHED_HOST=127.0.0.1
1
2إضافة الكود التالي في ملف
config/routes.yaml
:
memcached:
path: /memcached
controller: App\Controller\DefaultController::memcached
2
3
استخدام Memcached
استخدام التخزين المؤقت في الكنترولر:
phpuse Symfony\Component\Cache\Adapter\MemcachedAdapter; class DefaultController { /** * @Route("/memcached", name="memcached") */ public function memcached(): Response { $client = MemcachedAdapter::createConnection('memcached://127.0.0.1:11211'); $cache = new MemcachedAdapter($client); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Memcached!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21افتح المتصفح وزر
https://servbay-symfony-test.local/memcached
مثال Redis
تثبيت ملحق Redis
يتم تثبيت ملحق Redis مسبقًا في ServBay، لا حاجة للتثبيت الإضافي.
تكوين Redis
تكوين معلومات اتصال Redis في ملف
.env
:REDIS_URL=redis://127.0.0.1:6379
1إضافة الكود التالي في ملف
config/routes.yaml
:
redis:
path: /redis
controller: App\Controller\DefaultController::redis
2
3
استخدام Redis
استخدام التخزين المؤقت في الكنترولر:
phpuse Symfony\Component\Cache\Adapter\RedisAdapter; class DefaultController { /** * @Route("/redis", name="redis") */ public function redis(): Response { $redisConnection = RedisAdapter::createConnection('redis://127.0.0.1:6379'); $cache = new RedisAdapter($redisConnection); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Redis!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21افتح المتصفح وزر
https://servbay-symfony-test.local/redis
مثال قواعد بيانات علائقية
إنشاء بنية قاعدة البيانات وملفات الترحيل
إنشاء ملفات الترحيل
إنشاء ملفات الترحيل باستخدام مجموعة أدوات Maker الخاصة بـ Symfony:
bashphp bin/console make:migration
1تحرير ملفات الترحيل
العثور على ملف الترحيل الجديد في دليل
src/Migrations
وتحريره لتعريف هيكل جداول قاعدة البيانات:phppublic function up(Schema $schema): void { $this->addSql('CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY(id))'); }
1
2
3
4تشغيل الترحيل
استخدم أوامر Symfony لتشغيل الترحيل وإنشاء جداول قاعدة البيانات:
bashphp bin/console doctrine:migrations:migrate
1
مثال MySQL
تكوين MySQL
تكوين معلومات اتصال MySQL في ملف
.env
:DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1إضافة الكود التالي في ملف
config/routes.yaml
:
mysql_add:
path: /mysql-add
controller: App\Controller\DefaultController::mysqlAdd
mysql_get:
path: /mysql
controller: App\Controller\DefaultController::mysql
2
3
4
5
6
كتابة بيانات المستخدم
كتابة بيانات المستخدم في الكنترولر:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/mysql-add", name="mysql_add") */ public function mysqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/mysql", name="mysql") */ public function mysql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(json_encode($users)); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37افتح المتصفح وزر
https://servbay-symfony-test.local/mysql-add
وhttps://servbay-symfony-test.local/mysql
مثال PostgreSQL
تكوين PostgreSQL
تكوين معلومات اتصال PostgreSQL في ملف
.env
:DATABASE_URL=pgsql://root:[email protected]:5432/servbay_symfony_app
1إضافة الكود التالي في ملف
config/routes.yaml
:
pgsql_add:
path: /pgsql-add
controller: App\Controller\DefaultController::pgsqlAdd
pgsql_get:
path: /pgsql
controller: App\Controller\DefaultController::pgsql
2
3
4
5
6
كتابة بيانات المستخدم
كتابة بيانات المستخدم في الكنترولر:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/pgsql-add", name="pgsql_add") */ public function pgsqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/pgsql", name="pgsql") */ public function pgsql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(json_encode($users)); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37افتح المتصفح وزر
https://servbay-symfony-test.local/pgsql-add
وhttps://servbay-symfony-test.local/pgsql
من خلال الخطوات المذكورة أعلاه، تم إنشاء وتشغيل مشروع Symfony بنجاح باستخدام ميزات ServBay لإدارة والوصول إلى المشروع، بالإضافة إلى الاتصال بالعديد من قواعد البيانات واستدعاء البيانات.