لارافيل, Blade / 2025-06-21

أحدث تحسينات Laravel للمطورين: كتابة كود أنظف وأذكى مع الأمثلة

أحدث تحسينات Laravel للمطورين: كتابة كود أنظف وأذكى مع الأمثلة

2025-06-21 وقت القراءه : 2 دقائق

الجديد في Laravel: ما الجديد في الإصدارات الحديثة؟ (Laravel Edition #002)

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


1️⃣ تحسين التوجيه @use في Blade

✅ الأسلوب القديم:

في قوالب Blade، إذا أردت استخدام دوال أو ثوابت من خارج القالب، كنت تحتاج إلى كتابة وسوم PHP داخل Blade:

<?php use App\Helpers\formatPrice; ?>
<?php use App\Constants\TAX_RATE; ?>
<p>السعر بعد الضريبة: {{ formatPrice($price * TAX_RATE) }}</p>

هذا كان يُسبب تشويشًا في القالب، ويجعل الكود أقل نظافة.


🚀 التحسينات:

أصبح بإمكانك الآن استيراد الدوال والثوابت مباشرة باستخدام @use:

@use function App\Helpers\formatPrice;
@use const App\Constants\TAX_RATE;

<p>السعر بعد الضريبة: {{ formatPrice($price * TAX_RATE) }}</p>

هذا يُحسن من مظهر القالب ويجعله أنظف وأسهل قراءة.


📚 المصدر:

https://laravel.com/docs/12.x/blade#the-use-directive



2️⃣ إدارة سلسلة المهام بـ prependToChain() و appendToChain()

✅ الأسلوب القديم:

لإضافة مهام إضافية إلى سلسلة Jobs بعد إنشائها، كان عليك كتابة منطق مخصص لإعادة بناء السلسلة:

$chain = Job::withChain([
    new FirstJob,
    new SecondJob,
])->dispatch();


$existingChain = [$newJob, ...$chain->chain]; // بناء السلسلة يدويًا
$chain->chain = $existingChain;

🚀 التحسينات:

أُضيفت دوال prependToChain() وappendToChain() لتقوم بهذه المهمة بكل سهولة:

$chain->prependToChain([
    new PrependedJobOne,
    new PrependedJobTwo,
]);


$chain->appendToChain([
    new AppendedJobOne,
    new AppendedJobTwo,
]);

وهذه الدوال تضمن ترتيب المهام تلقائيًا بدون الحاجة لتعديل المصفوفات يدويًا.

📚 المصدر:

https://github.com/laravel/framework/releases/tag/v12.13.0



3️⃣ دعم الـ Callback في containsOneItem()

✅ الأسلوب القديم:

للتحقق إذا كان هناك عنصر واحد فقط يحقق شرطًا معينًا في Collection:

$filtered = $collection->filter(fn($item) => $item === 2);
$isOne = $filtered->count() === 1;

🚀 التحسينات:

الآن باستخدام containsOneItem() مع callback:

$collection->containsOneItem(fn($item) => $item === 2);

هذا يُقلل من حجم الكود، ويجعله أكثر وضوحًا.

📚 المصدر:

https://github.com/laravel/framework/pull/49558



4️⃣ إضافة assertRedirectBack() للاختبارات

✅ الأسلوب القديم:

للتحقق في الاختبارات من إعادة التوجيه للصفحة السابقة:

$response->assertRedirect(url()->previous());

🚀 التحسينات:

الآن باستخدام:

$response->assertRedirectBack();

هذا يجعل الاختبار أكثر وضوحًا وأقل عرضة للأخطاء.

📚 المصدر:

https://github.com/laravel/framework/pull/49443

إضافة تعليق
Loading...