دوال المساعد (Helper Functions) في Laravel: دليل خطوة بخطوة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا دوال المساعد (Helper Functions) ضرورية في Laravel

\n\n

إذا سبق لك العمل مع Laravel، فبالتأكيد واجهت هذا الموقف: في المتحكم (Controller) أو القالب (Template)، تحتاج مرارًا وتكرارًا إلى تنسيق التاريخ، قص النص، التحقق من الصلاحيات، أو إنشاء slug. تنسخ نفس قطعة الكود من مشروع إلى آخر، ثم تلوم نفسك على التكرار.

\n\n

هل يبدو هذا مألوفًا؟ مرحبًا بك في النادي. على Stack Overflow، سؤال "How to create custom helper functions in Laravel" يجمع آلاف المشاهدات - وهذا ليس من قبيل الصدفة. دوال المساعد (أو ببساطة "helpers") هي طريقتك لقول "لا" للنسخ واللصق و"نعم" لكود نظيف وقابل لإعادة الاستخدام.

\n\n

في هذا الدليل التعليمي، لن نعرض فقط كيفية إنشاء أول دالة مساعدة لك. سنشرح ثلاث طرق مجربة - من الأبسط إلى الأكثر تقدمًا مع التحميل التلقائي عبر Composer. ستتعلم كيفية تنظيم الدوال المساعدة بحيث لا تتحول إلى مزبلة، وكيفية اختبارها دون صداع.

\n\n

هيا بنا!

\n\n

ما هي دالة المساعد (Helper Function) ولماذا تحتاجها؟

\n\n

دالة المساعد هي دالة PHP عادية تؤدي مهمة واحدة محددة. يحتوي Laravel بالفعل على دوال مساعدة مدمجة: str_slug()، route()، config() وغيرها. لكن عاجلاً أم آجلاً، ستحتاج إلى شيء خاص بك - مثل دالة لتنسيق رقم الهاتف أو إنشاء معرف فريد.

\n\n

مزايا الدوال المساعدة المخصصة:

\n
    \n
  • إعادة استخدام الكود - اكتبها مرة واحدة، واستخدمها في كل مكان.
  • \n
  • قابلية القراءة - بدلاً من 10 سطور من الشروط، تكتب formatPhone($number).
  • \n
  • قابلية الاختبار - يمكن تغطية الدوال المساعدة بسهولة باختبارات الوحدة (Unit Tests).
  • \n
  • إدارة مركزية - غير المنطق في مكان واحد، وسيتم تطبيقه في جميع أنحاء المشروع.
  • \n
\n\n

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

\n\n

الطريقة 1: التقليدية - ملف helpers.php يدويًا

\n\n

أبسط وأوضح طريقة للمبتدئين. ننشئ ملف app/helpers.php ونربطه في composer.json.

\n\n

الخطوة 1. إنشاء ملف helpers.php

\n\n

انتقل إلى جذر مشروع Laravel الخاص بك وأنشئ ملف app/helpers.php. بداخله، نكتب دالة بسيطة:

\n\n
<?php\n\nif (!function_exists('formatDate')) {\n    function formatDate($date, $format = 'd.m.Y')\n    {\n        if (!$date) {\n            return null;\n        }\n        return Carbon\\Carbon::parse($date)->format($format);\n    }\n}
\n\n

لاحظ استخدام الغلاف if (!function_exists(...)). هذا تأمين ضد التعارضات، في حال كانت الدالة معرفة بالفعل في مكان آخر. استخدم هذه البنية دائمًا.

\n\n

الخطوة 2. ربط الملف عبر Composer

\n\n

افتح composer.json وفي قسم autoload أضف:

\n\n
"files": [\n    "app/helpers.php"\n]
\n\n

يجب أن يصبح الشكل النهائي مشابهًا لهذا:

\n\n
"autoload": {\n    "psr-4": {\n        "App\\\\": "app/"\n    },\n    "files": [\n        "app/helpers.php"\n    ]\n}
\n\n

الآن، نفذ الأمر التالي في الطرفية (Terminal):

\n\n
composer dump-autoload
\n\n

تمام! الآن يمكنك استخدام formatDate() في أي مكان في تطبيق Laravel الخاص بك - في المتحكمات (Controllers)، النماذج (Models)، قوالب Blade.

\n\n

الطريقة 2: عبر Service Provider (أكثر تقدمًا)

\n\n

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

\n\n

الخطوة 1. إنشاء Service Provider

\n\n

نفذ أمر artisan:

\n\n
php artisan make:provider HelperServiceProvider
\n\n

افتح الملف الذي تم إنشاؤه app/Providers/He

المدونات

توصيات الكتب