منذ فترة ليست بالبعيدة تم الاعلان عن الاصدار الجديد من لارافيل 5 وكانت تحمل رقم 5.3، حيث حمل هذا الاصدار العديد من الميزات الرائعة التي تجعل العمل في لارافيل أكثر متعة وسلاسة.

تغير في بعض المجلدات والملفات

في السابق عند تنصيب لارافيل، كانت هناك بعض المجلدات الفارغة تاتي بشكل افتراضي معها وبداخلها بعض الكلاسات التي لا يستخدمها المطور الى عند الحاجة، وهذه المجلدات هي:

  • Events
  • Listeners
  • Policies

وهي توجد في مجلد app

الأن عندما تقوم بتنصيب لارافيل لن تجد هذه المجلدات موجودة بشكل افتراضي، سوف يتم انشائها عند الحاجة اليها، مثلا عندما تقوم بتوليد Listener جديد عن طريق php artisan سوف يتم انشاء مجلد Listeners وبداخله الكلاس الذي أنشأته، ونفس الامر مع Events, Policies.

وايضا هناك تغير اخر مهم جدا حصل في بنية المجلدات، وهو حذف ملف routes.php الذي كان يتواجد في app/Http/routes.php
وتم استبداله بمجلد جديد اسمه routes المتواجد في جزر المشروع (root) وفي داخله ثلاثة ملفات api.php, console.php, web.php

  • في ملف api.php: هنا تقوم بكتابة جميع المسارات الخاصة في API التطبيق والتي تحمل بداية “api”، كما هو موضح في الصورة طريقة تعريف هذا الملف.

    تعريف مسارات الـ “API” الخاصة بالتطبيق
    تعريف مسارات الـ “API” الخاصة بالتطبيق
  • في ملف web.php: تقوم بكتابة جميع المسارات التطبيق، في الاسفل صورة لتعريف هذا الملف.

    تعريف مسارات الـ "web" الخاصة بالتطبيق
    تعريف مسارات الـ “web” الخاصة بالتطبيق
  • في ملف console.php: هنا يمكنك تعريف جميع الأوامر (commands) الخاصة بالتطبيق، والتي سوف تظهر عندما تقم بكتابة php artisan في الواجهة النصية (terminal).

* تم التقاط الصور في الأعلى من ملف app/Providers/RouteServiceProvider.php

أعجبني جدا تحديث routes الجديد، الان أصبحت الأمور منظمة بشكل أكبر، وكـفكرة يمكننا عملها الأن انشاء ملف جديد داخل مجلد routes باسم الشئ الذي نريده.
لنوضح الأمور أكثر: لنفترض انك تقوم بعمل لوحة تحكم للتطبيق (Dashboard)، جميع المسارات هنا سوف تبداء (prefix) بـ dashboard أو admin وسوف تحمل “middleware” للتحقق من المستخدم ان كان مدير ام لا، كي لا نكتب هذه الامور في ملف web.php نستطيع تعريف ملف جديد باسم admin.php أو الشئ الذي يحلو لك في ملف RouteServiceProvider.php، كما في الصورة:

تعريف مسارات لوحة التحكم الخاصة بالتطبيق
تعريف مسارات لوحة التحكم الخاصة بالتطبيق

وفي ملف admin.php نقوم بتعريف المسارات بشكل عادي كما كنا نفعل سابقا.

باني الإستعلام (Query Builder) يقوم بإرجاع Collections

تحديث بسيط ولكن من المهم ان تلقي نظرة عليه، في الاصدارات السابقة من لارافيل عندما تقوم بعمل إستعلام الى قواعد البيانات باستخدام كلاس DB كان النتائج ترجع بشكل مصفوفة (array)، ولكن الأن اصبحت ترجع النتائج بشكل Collection مع كل خصائصه.

$result = DB::table('users')->get();

if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }

هذه الميزة كانت متوفرة فقط مع Eloquent ORM ولكن الان أصبح بامكاننا استخدامها في Query Builder.

الدوال المساعدة Cache

الأن في الاصدار الجديد من لارافيل اصبح بامكانك استخدام دالة ()cache بدل من استخدام كلاس Cache، يمكنك استخدامها بنفس الطريقة التي تستخدم بها دالة session.

أضافات على JavaScript

الأن سوف تشاهد بعض المكاتب الجديد التي اضيفت على ملف package.json، في هذا الاصدار من لارافيل اصبحت كل من bootstrap, jquery, vue تاتي بشكل افتراضي معها.

وايضا سوف تشاهد مجلد جديد resources/assets/js سوف تجد فيه ملفات JavaScript وكود تشغيل Vue، على أية حال انت لست مجبر على استخدام هذه المكاتب يمكنك حذف ما تشاء منها واضافة ما تشاء عليها ويمكنك العمل بالطريقة التي تحلو لك.

تخصيص ترقيم الصفحات Paginator

في الاصدارات القديمة من لارافيل لم يكن بامكانك تخصيص عرض الـ Paginator، لكن بالتحديث الجديد لـ لارافيل اصبح الامر سهل جدا.

في البداية يجب عليك اخراج ملفات الـ blade الخاصة بالحزم من مجلد vendor عن طريق التعليمة التالية: php artisan vendor:publish.
والان سوف تجد في المسار التالي resources/views/vendor/pagination ملفات blade الخاصة بالـ Paginator يمكنك تخصيصها كما تشاء.

طريقة جديدة في ارسال الاميلات Mailables!

Mailables: نظام جديد يجعل من عملية ارسال الاميلات اكثر متعة وبساطة، الان لتقوم بارسال ايميل يجب عليك أن تنشئ Mailables Class لتقوم من خلاله بتمرير خصائص الاميل مثل ملف الـ blade الخاص بالاميل أو المتغيرات التي سوف تستعملها داخل ملف الـ blade.

لانشاء Mailables Class جديد يجب عليك استخدام الامر التالي: php artisan make:mail YourClassName، سوف تجده في المسار التالي: app/Mail/YourClassName.php.

مثال لكيفية ارسال الأميل:

Mail::to('[email protected]')->send(new YourClassName);

أكثر بسيطة اليس كذلك؟!

متغير $loop داخل foreach في قوالب Blade

من الامور الجميلة ايضا التي سوف نرها الان في الاصدار الجديد لـ لارافيل، هو متغير $loop، نستطيع الوصول له داخل الـ foreach في قوالب Blade

هذا المتغير عبارة عن Object به بعض الخصائص التي سوف تعطينا معلومات عن البيانات الموجودة داخل الحلقة (foreach) والتي تساعدنا على ادارة العمل بشكل أفضل، لنشاهد هذه الخصائص معا:

@foreach ($users as $user)
    @if ($loop->count)
        @if ($loop->first)
            <li class="item first">{{ $user->name }}</li>
        @elseif ($loop->last)
            <li class="item last">{{ $user->name }}</li>
        @else
            <li class="item">{{ $user->name }}</li>
        @endif
    @endif
@endforeach

دالة toggle() في العلاقات

يمكنك استخدام هذه الدالة مع العلاقات (relationships) من نوع belongsToMany ، هذه الدالة سوف تقوم بحذف السجل (record) في جدوال العلاقة في حال التواجد، وسوف تقوم باضافة في حال لم يكن موجود.

هذه الدالة سوف توفر علينا العناء والتعب!، دعنا ناخذ مثال عن عملها لنوضح الامور أكثر.
لنفترض انك تقوم بعمل موقع به منشورات “Posts” وكل منشور يوجد له زر اعجاب، يستطيع المستخدم “User” ان يضغط على زر اعجاب او الغاء الاعجاب (مثل فيس بوك تماما)، سوف نقوم ببناء العلاقة من نوع belongsToMany كي نستطيع استخدام دالة toggle. وسوف يصبح الكود بالشكل التالي:

$user->likes()->toggle($post);

يمكننا عمل الكثير من الأفكار من خلال هذه الدالة، مثلا: المقالات المفضلة للمستخدم، الفيديوهات المشاهدة، الخ..

Notifications الإشعارات

اعتقد ان هذه الميزة هي الافضل في التحديث الجيديد لـ لارافيل.
Notifications هي نظام يتيح لنا ارسال التنبيهات بسهولة للمستخدم عبر Email، SMS، Slack وايضا يمكننا تخزين التنبيهات في قواعد البيانات (database) كي نعرضها في التطبيق الخاص بنا.

لانخذ مثال سريع عن طريق ارسال التنبيه للمستخدم:

$user->notify(new NewPost($post));

جميل اليس كذلك؟
يمكننا عمل العديد من الافكار هنا مثلا تنبيه المستخدم في حال تم اضافة مقالة جديدة في التطبيق، ارسال SMS عندما يحدث عملية مالية، الخ..
يمكنك أيضا مشاهدة هذا الشرح المفصل عن التنبيهات.

رفع الملفات أكثر بساطة!

الأن اصبح بمكانك رفع الملف المرسل من الحقل (Input) بكل سهولة، فقط عن طريق الكود التالي:

request()->file('InputFileName')->store('dirName', 'diskName');

بسيطة جدا وجميلة، احببتها ❤️

Laravel Passport

Laravel Passport: هي حزمة (Package) جديدة من لارافيل تمكنك من عمل نظام OAuth2 و API authentication خلال دقائق!

يمكنك الاطلاع على التفاصيل من هنا.

مرحلة سابقة من التهجير Migrations Rollback

في الاصدارات السابقة من لارافيل كان بامكاننا التراجع عن اخر تهجير (Migration) قمنا به في قواعد البيانات، لكن الان اصبح بامكاننا الرجوع بالخطوات (steps) عن طريق المعامل steps parameter، مثل المثال التالي:

php artisan migrate:rollback --step=1

Laravel Scout

Laravel Scout: هي حزمة توفر لنا عمليات بحث متقدمة في جميع النصوص (full-text search) لـ Eloquent، والتي تعمل من خلال خدمة Algolia التي تتيح لنا التخزين والبحث في البيانات بتخصيص كبير.

يمكنك الاطلاع على التفاصيل من هنا.

Laravel Echo

ايكو هي نظام جديد لنشر الأحداث Events Broadcasting بالإعتماد على Pusher، جاء لتحسين النظام القديم لنشر الأحداث في لارافيل.

يمكنك ان تشاهد هذا الفيديو الرائع لـ Taylor Otwell عن Echo.

خاتمة

حاولت في هذه المقالة ان اغطي جميع التحديثات التي وجدتها وان اشرح قدر المستطاع، ربما يوجد تحدثات اخرى لا اعلم بها.

لمن يريد التعمق أكثر في التحديثات يوجد شرح مفصل في موقع laracasts يقدمه Jeffrey Way ❤️
في حال كان لديك اي سؤال بخصوص لارافيل لا تتردد في طرحه ^^.

Posted by:حسام عبد

CTO & Director / Founder

4 thoughts on “ ما الجديد في 5.3 Laravel ”

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.