اذهب إلى المحتوى
  • 0

PHP Frameworks

Jamel Alhaji

السؤال

Recommended Posts

  • 0

Symfony يعتبر أكثر أطر PHP توجهًا نحو مفهوم "المكونات" و"الباقات" (bundles)، وهو مبني على مفهوم تقسيم التطبيق إلى أجزاء قابلة لإعادة الاستخدام، ويُشجع على استخدام مكونات معمارية متكاملة لبناء تطبيقات مختلفة.

وهو إطار عمل أكبر وأكثر تعقيدًا من Laravel، ويوفر مجموعة واسعة من الميزات والمكونات، مما يجعله خيارًا جيدًا للتطبيقات المعقدة أو الكبيرة، ولكن ذلك الحجم والتعقيد يجعله أكثر صعوبة في التعلم والاستخدام من Laravel.

بينما Laravel يهدف إلى توفير تجربة تطوير سريعة وسهلة، ويتبنى مفهوم "التعبيرات" (Expressions) ويقدم ميزات مثل نظام التوجيه (Routing) ومستوى عال من التطبيقات المشهورة والقائمة مسبقًا.

وهو إطار عمل أصغر وأكثر إحكامًا من Symfony وأسهل في التعلم والاستخدام، ولكنه يوفر عددًا أقل من الميزات والمكونات مما يجعله خيارًا جيدًا للتطبيقات الأصغر أو الأقل تعقيدًا، أي المشروعات الصغيرة والمتوسطة.

وSymfony يقدم مجموعة كبيرة من المكتبات والمكونات الإضافية جاهزة للاستخدام مثل Doctrine للوصول إلى قواعد البيانات وTwig للقوالب.

بينما Laravel يأتي بميزات مدمجة مثل Eloquent ORM للعمل مع قواعد البيانات وBlade للقوالب، وأيضًا هناك مكتبات إضافية وحزم جاهزة تمكنك من توسيع وظائف التطبيق بسهولة.

وLaravel يُقدم أداءً جيدًا ومن الممكن تحسينه بشكل جيد أما Symfony فهو أفضل إذا كان لديك متطلبات أداء صارمة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

نعم هناك فرق بين الإطارين Laravel و Symfony، كلاهما يُعتبر إطار عمل للُغة PHP، إطار Symfony ظهر أولاً تم إطلاق أول إصدار منه سنة 2005 أما Laravel فتم إطلاق أول إصدار منه سنة 2011.

يركز Laravel على بساطة الكود بالنسبة للمطور (للوصول إلى الحل ببساطة) والذي يمر عبر استخدام التوابع السحرية لـ PHP من أجل تقديم كود مقروء مقارب لللغة الإنجليزية.

يفرض Symfony صرامة أكبر وهو أقرب إلى كود PHP الكلاسيكي (باستثناء إعدادات yaml)، وبالتالي فهو أكثر تفصيلًا بشكل عام. يسمح استخدامه المنخفض للتوابع السحرية بالتنقل بشكل أفضل في الكود والتحليل الثابت المبسط.

إختيار أحدهما على الآخر يرجع للسوق، متطلبات العمل أو المشروع، الخيار الشخصي أيضاً، كلاهما يُمكننا من إنشاء تطبيقات و مشاريع متوسطة التعقيد إلى معقدة، أيضاً كلاهما يوفر السرعة و الأداء الجيد بالإضافة للحماية و الأمان و مجموعة من الأدوات المساعدة في التطوير. إطار Laravel يستخدم بذاته بعض المكونات من Symfony حتى لا يكرر العجلة

التثبيت:

في كلا الإطارين، يمكن إجراء التثبيت من خلال أمر create-project الخاص بـ composer:
# Laravel
composer create-project laravel/laravel example-app

# Symfony 
composer create-project symfony/skeleton:"6.3.*" my_project_directory
cd my_project_directory
composer require webapp

يتطلب Symfony عدة أوامر لأنه يُنشئ مشروع في وضع "microservice" إفتراضيًا، و يُضمن الحد الأدنى من المكونات فقط. يسمح لك أمر composer require webapp بتثبيت جميع المكونات اللازمة لإنشاء تطبيق ويب كلاسيكي.

نلاحظ أيضًا أن الإطارين يشتملان على أمر (laravel لـ إطار Laravel وsymfony لـ إطار Symfony) يمكن استخدامهما للتحكم في إطار العمل وتنفيذ مهام معينة (تهيئة مشروع على سبيل المثال).

هيكلية ملفات المشروع:

تتشابه هيكلية الملفات في الإطارين مع وجود مجلد public والذي سيكون بمثابة جذر خادم HTTP. يتم وضع الشيفرات المصدرية للمشروع في مجلد src بالنسبة لـ Symfony و app في حالة Laravel. في كلا الإطارين ستوضع الإعدادات في مجلد بالإسم config مع الاختلاف الرئيسي وهو التنسيق المستخدم في الملفات.

  • يستخدم Laravel ملفات PHP تُرجع مصفوفات
  • يستخدم Symfony ملفات yaml بشكل افتراضي

كلاهما يعتمد على نمط التصميم MVC

المسارات:

الآن بعد أن تم تثبيت الإطارات، سنكون قادرين على إنشاء المسار الأول لإنشاء الصفحة. في حالة Laravel نبدأ بإنشاء المتحكم، يمكن إنشاء المتحكم يدوياً أو عن طريق أوامر artisan المساعدة:

لإنشاء متحكم عبر artisan نكتب:

php artisan make:controller HelloController

ثم نستطيع وضع الوظائف بداخله:

<?php
namespace App\Http\Controllers;

class HelloController extends Controller
{
  public function hello()
  {
    return 'Hello';
  }
}

ثم نعلن عن المسار الذي يسمح بالوصول إلى الوظيفة:

// routes/web.php
Route::get('/hello', [HelloController::class, 'hello'])->name('hello');

من ناحية Symfony، من الممكن الإعلان عن المسارات من خلال السمات الموجودة في المتحكم مباشرةً.

الأوامر الموافقة لـ artisan في Symfony هي أوامر bin/console فلإنشاء متحكم في Symfony نقوم بتنفيذ:

php bin/console make:controller HelloController

ثم نستطيع وضع الوظائف بداخله:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class BlogController extends AbstractController
{
  #[Route('/hello', name: 'hello')]
  public function hello(): Response
  {
    return new Response('hello');
  }
}

و كما تلاحظ فإن المسار يأتي مضمناً كسمة فوق الوظيفة

التعامل مع الطلبات:

بالنسبة لكلا الإطارين، من الممكن حقن وسيط في وظائف المتحكم للتعامل مع الطلب:

public function hello(Request $request): Response
{
  dd($request->query->get('name'));
}

لاحظ أن كائن الطلب الموجود في Laravel يرث من صنف الطلب الموجود في Symfony ليقدم طرقًا أسرع لتنفيذ العمليات الأساسية.

التعامل مع مُعاملات المسارات:

بالإضافة إلى معالجة الطلب، من الممكن أيضًا تمرير معاملات في عنوان ال URL. بناء الشيفرة والتشغيل متشابه في الإطارين:

# Laravel
Route::get('/hello/{name}', [HelloController::class, 'hello']);

# Symfony
#[Route('/hello/{name}')]

يمكننا بعد ذلك الوصول لهذا المعامل في المتحكم كوسيط في الوظيفة:

public function hello(string $name) {

}

محرك القالب:

لعرض صفحات HTML سيكون من الممكن استخدام محرك قوالب، وعند هذه النقطة يظهر فرق بين الإطارين

يستخدم Symfony محرك القوالب twig الذي يستخدم syntax خاص به

مثال:

{% extends "base.html.twig" %}

{% block title %}Page Title{% endblock %}

{% block sidebar %}
    {{ parent() }}
    <p>This is appended to the master sidebar.</p>
{% endblock %}

{% block content %}
    {% for post in posts %}
        <article>
            <h2>{{ post.title }}</h2>
            <p>{{ post.excerpt }}</p>
            <p><a href="{{ path('post.show', {slug: post.slug}) }}">Read more ...</a></p>
        </article>
{% endblock %}

يستخدم Laravel محرك قوالب خاص بإطار العمل: Blade. يقوم هذا المحرك بتوسيع ال syntax الخاص بـ PHP بميزات جديدة ولكنه يقبل أيضًا كود PHP صالح.

مثال:

@extends('layouts.app')

@section('title', 'Page Title')

@section('sidebar')
    @parent

    <p>This is appended to the master sidebar.</p>
@endsection

@section('content')

    @foreach($posts as $post)
        <article>
            <h2>{{ $post->title }}</h2>
            <p>{{ $post->excerpt }}</p>
            <p><a href="{{ route('post.show', ['slug' => $post->slug]) }}">Lire la suite</a></p>
        </article>
    @endforeach

@endsection

.لاحظ أن Blade يوفر نظامًا من المكونات تسمح لك بتضمين جزء من القالب باستخدام syntax أقرب إلى HTML:

<form method="post">
    <x-input :value="$post->title" label="Title">
</form>

الإستمارات:

إحدى المهام المتكررة عند العمل على الواجهة الخلفية هي إنشاء النماذج ومعالجتها.

في Symfony، يمر إنشاء الإستمارة عبر صنف مخصص يسمح لنا بتمثيل البيانات في الإستمارة الخاصة مع إمكانية إضافة قواعد التحقق من الصحة إلى الخصائص باستخدام سمات PHP.

في Laravel لا يوجد فئة لتمثيل الإستمارة، ولا لتوليد الإستمارة. في شيفرة القالب الخاصة بنا، سنقوم بإنشاء الإستمارة الخاص بنا بالطريقة الكلاسيكية (يمكننا استخدام التضمينات أو المكونات لتبسيط كتابة الحقول).

ORM:

يعد ORM أيضًا نقطة اختلاف كبيرة بين الإطارين.

يستخدم Laravel بشكل افتراضي Eloquent وهو ORM يعتمد على Active Record حيث يكون النموذج مسؤولاً عن تمثيل الكيان، ولكن أيضًا عن إدارة البيانات من خلال الجدول الموافق في قاعدة البيانات.

// get
$post = Post::find(1);
// update
$post->title = "Title 1";
$post->save();
// create
$post2 = Post::create(['title' => 'Title 2']); 
// delete
$post3->destroy(); 

يستخدم Symfony بشكل افتراضي Doctrine وهو ORM يعتمد على مبدأ Data Mapper حيث يقوم بفصل مفهوم الكيان (كائن يمثل البيانات)، والمستودع Repository  (كائن يستخدم لاسترداد الكيانات) والمدير Manager  (كائن مسؤول عن إدارة البيانات). 

$em = $this->getDoctrine()->getManager(); // Entity Manager
// get
$post = $em->getRepository(Post::class)->find(1);
// update
$post->setTitle('Title 1');
// create
$post2 = new Post();
$post2->setTitle('Title 2');
$em->persist($post2);
// delete
$em->remove($post3);
// وفي جميع الحالات لا يتم إرسال البيانات إلى قاعدة البيانات
// للقيام بذلك، يجب عليك استدعاء التابع flush
$em->flush();

يمتلك Eloquent جمل أقصر ومنطقًا يبدو أكثر طبيعية، ولكن هذه البساطة الواضحة يمكن أن تؤدي إلى "نماذج كبيرة" لأنه سيتم تخزين كل المنطق في مكان واحد. بينما يسمح Doctrine بفصل أفضل ولكن سيتبين أنها مطولة نسبيًا في الحالات البسيطة.

المصادقة:

بالنسبة للمصادقة، يقدم Laravel "مجموعات بدأ" تسمح لنا بإعداد جميع عمليات إدارة حساب المستخدم الكلاسيكية. مثل Jetstream و UI بالإضافة إلى Breeze ستقوم هذه المجموعات بتوليد النماذج Models و المتحكمات بالإضافة لملفات القوالب اللازمة،

مثلاً عند إستخدام Breeze:

php artisan breeze:install

php artisan migrate
npm install
npm run dev

سيتم إنشاء الكود في مجلد التطبيق الخاص بك ويمكنك تعديله لإضافة السلوك الذي تريده عن طريق تعديل الكود المصدري.

لدى Symfony، من جانبها، مكون أمان يقوم بإدارة المصادقة:

php bin/console make:user
php bin/console make:auth
php bin/cinsole make:registration-form

سيسمح لك تشغيل هذه الأوامر بتكوين إعداد المصادقة. من ناحية أخرى، ما يتم تقديمه افتراضيًا هو أقل بكثير مقارنة بـ Laravel وستحتاج إلى تطوير قسم تذكير كلمة المرور وتحرير الحساب وحذفه و ما إلى ذلك.

نفس القلب: حاوية الخدمة Service Container:

على الرغم من وجود نهج مختلف من حيث الأساليب المقدمة، إلا أن الإطارين يحتويان على نفس نظام حاوية الخدمة لتوصيل المكونات المختلفة معًا. إذا أردنا على سبيل المثال توليد صفحة:

// laravel
view('posts.index'); // نقوم بإستدعاء دالة عامة

// Symfony
$this->render('posts/index.html.twig') // نقوم بإستدعاء تابع من المتحكم

على الرغم من الاختلاف الكبير بين الطريقتين، إلا أن هاتين الطريقتين تنفذان تعليمات برمجية متشابهة نسبيًا إذا نظرنا إلى ما هو مخفي خلفهما:

// Laravel 
// view('posts.index');
Container::getInstance()->get('view')->make('posts/index');

// Symfony
// $this->render('posts/index.html.twig')
$this->container->get('twig')->render('posts/index.html.twig')

في كلتا الحالتين، سيبدأ الإطار بإنشاء حاوية سيتم ملؤها بعد ذلك بخدمات مختلفة يمكن استرجاعها بعد ذلك وفقًا للاحتياجات داخل التطبيق. يختلف Laravel عن Symfony في أنه يجعل الحاوية قابلة للوصول في أي مكان في التطبيق بفضل استخدام Singleton، حيث سيفرض Symfony صرامة أكبر من خلال إجبار المستخدم على تحديد التبعيات من خلال ملف services.yml.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

Symfony و Laravel هما اثنان من أشهر أطُر العمل (Frameworks) في عالم تطوير تطبيقات الويب باستخدام لغة PHP. على الرغم من أنهما يؤديان نفس الغرض العام وهو تسهيل تطوير تطبيقات الويب، إلا أن لديهما بعض الاختلافات البارزة. 

Symfony مصمم ليكون أكثر تعددية ومرونة، ويسمح للمطورين بتحديد تفاصيل العمليات بشكل أكبر. إنه يعزز مبدأ التكوين عبر الترميز ويسعى لتقديم مكتبة قوية ومكونات معيارية لبناء تطبيقات مختلفة.

Laravel يستند إلى مبدأ التسجيل النشط ويوفر تجربة تطوير أكثر سهولة وسرعة. إنه يوفر عددًا كبيرًا من الميزات المدمجة والأدوات لتبسيط مهام تطوير تطبيقات الويب ويعتمد على مفاهيم تطوير سريعة وأساليب تبسيط القواعد البيانات.

Symfony يقدم مجموعة كبيرة من المكتبات المستقلة والأدوات الجاهزة للعمل معها. من الممكن استخدام مكتبات Symfony بشكل منفصل عن الإطار نفسه.

Laravel يأتي مع العديد من المكتبات والأدوات المدمجة مثل Eloquent ORM و Blade Templating و Laravel Mix لإدارة الموارد الأمامية. إنه يوفر تكاملًا عميقًا مع هذه الأدوات ويجعل من السهل البدء بسرعة في تطوير التطبيقات.

Symfony لديه مجتمع نشط وكبير من المطورين والمساهمين. يتمتع بدعم جيد وتوثيق شامل.

Laravel أيضًا لديه مجتمع قوي ونشط. يمكنك العثور على الكثير من المصادر التعليمية والوثائق لدعم تعلمه واستخدامه.

Symfony غالبًا ما يكون أداءه أفضل في الحالات التي تتطلب مرونة وتخصيصًا كبيرًا.

Laravel يقدم أداء جيد ومعقول لمعظم التطبيقات، وهو مناسب بشكل خاص للتطبيقات الصغيرة والمتوسطة الحجم.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بالإضافة للفروقات السابقة حيث تم الشرح بطريقة ممتازة في التعليقات السابقة ولكن من ناحية فرص العمل Symfony و Laravel يعتبران كلاهما شائعين ومطلوبين في سوق العمل. 

  •  Symfony لديه تاريخ طويل ومجتمع نشط من المطورين والشركات التي تستخدمه. يستخدم Symfony في تطوير تطبيقات ويب متكاملة ومعقدة، ويتميز بقوة ومرونة في إدارة البيانات وتوفير الأدوات المتقدمة للتحكم في المشروع. بالنظر إلى شعبية Symfony وتبنيه من قبل الشركات الكبيرة، يمكن أن يكون لديك فرص عمل جيدة في مجال Symfony.
  • Laravel حقق شعبية متزايدة في السنوات الأخيرة بسبب سهولة التعلم والاستخدام وتجربة التطوير الجذابة التي يقدمها. يستخدم Laravel في تطوير التطبيقات الويب السريعة والمرنة والمبتكرة، ويوفر العديد من الميزات والأدوات التي تسهل عملية التطوير. بالنظر إلى زيادة الطلب على Laravel، فإن فرص العمل في هذا المجال يمكن أن تكون واعدة.

يجب ملاحظة أن فرص العمل تعتمد أيضًا على عوامل أخرى مثل موقعك الجغرافي ومستوى خبرتك ومجالات الاهتمام الخاصة بك. قد يكون من المفيد أن تبحث عن فرص العمل المحلية في سوق العمل الذي تهتم به وتقيم الطلب على كل من Symfony و Laravel في ذلك السوق. كما يمكنك أيضًا مراجعة مواقع العمل الشهيرة والمجتمعات المطورة للبحث عن إشارات حول الطلب على هذين الإطارين.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...