Laravel 5

  • إزالة معلمة api_token في Laravel 5

    بما أنك تستخدم Laravel 5 وتواجه تحدي في إزالة معلمة من جميع كائنات الطلب (Request Objects) على مستوى المُتحكم (Controller Level)، فإن هناك حلولٌ تقنية يمكن اعتمادها لتحقيق هذا الغرض.

    أحد الطرق للتعامل مع هذا التحدي هو استخدام ميزة المتوسطات (Middleware) في Laravel. يمكنك إنشاء متوسطة خاصة لتنفيذ عملية إزالة المعلمة (parameter) المحددة (مثل api_token) من جميع كائنات الطلب قبل أن يصل الطلب إلى الدالة المخصصة في المتحكم.

    فلنفترض أن لديك متوسطة تسمى “RemoveApiTokenParameterMiddleware”. يمكنك إنشاءها باستخدام الأمر التالي:

    php
    php artisan make:middleware RemoveApiTokenParameterMiddleware

    سيقوم هذا الأمر بإنشاء ملف جديد للمتوسطة في مجلد Middleware.

    بعد ذلك، يمكنك تعديل المتوسطة لتنفيذ الوظيفة المطلوبة. يجب أن تقوم المتوسطة بفحص جميع كائنات الطلب وإزالة المعلمة api_token إذا وُجدت.

    في الملف RemoveApiTokenParameterMiddleware.php:

    php
    namespace App\Http\Middleware; use Closure; class RemoveApiTokenParameterMiddleware { public function handle($request, Closure $next) { // إزالة المعلمة api_token إذا كانت موجودة في كائن الطلب $request->request->remove('api_token'); return $next($request); } }

    ثم، يجب عليك تسجيل المتوسطة الجديدة في ملف Kernel.php الذي يقع في مسار app/Http:

    php
    protected $middlewareGroups = [ 'web' => [ // ... ], 'api' => [ // ... \App\Http\Middleware\RemoveApiTokenParameterMiddleware::class, ], ];

    هذا سيؤكد تنفيذ المتوسطة على جميع مسارات الـ API. وبهذا، سيتم إزالة المعلمة api_token من جميع كائنات الطلب تلقائيًا قبل أن يصل الطلب إلى دوال التحكم في المُتحكمات الخاصة بك.

    المزيد من المعلومات

    بالتأكيد، يُمكننا استكمال المقال بمزيد من التفاصيل والشروحات لضمان فهم شامل للموضوع.

    فيما يلي الجزء المكمل للمقال:


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

    الآن، بمجرد تنفيذ المتوسطة كما هو موضح، لن تعود معلمة api_token تظهر في كائنات الطلب في مُتحكماتك. بمعنى آخر، لن تحتاج بعد الآن إلى استخدام unset($request['api_token']) في كل دالة تحكم تحتاج إلى استخدام الطلب.

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

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

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

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

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


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

  • تحقق من تاريخ اليوم في Laravel 5

    بالتأكيد، دعني أوضح لك كيف يمكنك فحص ما إذا كان التاريخ الذي تحقق منه هو “اليوم” في Laravel 5.

    للقيام بذلك، يمكنك استخدام الدالة today() للحصول على تاريخ اليوم بتنسيق DateTime في Laravel. ثم يمكنك استخدام هذا التاريخ للمقارنة مع تواريخ الأحداث في الخط الزمني.

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

    php
    use Carbon\Carbon; $currentDate = Carbon::today()->format('d.m.Y'); @if($event[$i]->created_at->format('d.m.Y') == $currentDate) .... @endif ?>

    في هذا المثال، تم استخدام مكتبة Carbon المدمجة مع Laravel للحصول على تاريخ اليوم باستخدام Carbon::today() ثم تم تنسيقه إلى النمط المحدد بواسطة format('d.m.Y').

    ثم يمكنك قارن تاريخ الحدث مع تاريخ اليوم للتحقق مما إذا كان الحدث يحدث “اليوم” أو لا.

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

    المزيد من المعلومات

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

    استخدام مكتبة Carbon في Laravel 5:

    مكتبة Carbon هي مكتبة تاريخ ووقت مدمجة مع Laravel تسمح بإجراء العديد من العمليات المفيدة على التواريخ والأوقات بطريقة بديهية.

    للاستفادة من ميزاتها، يجب عليك أولاً استيراد الفصل المناسب في ملف الكود الخاص بك:

    php
    use Carbon\Carbon;

    ثم يمكنك استخدام Carbon::today() للحصول على تاريخ اليوم بتنسيق DateTime. هذا يسمح لك بتنفيذ المقارنات والعمليات الأخرى على التواريخ بسهولة.

    تحسين قراءة الشيفرة:

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

    مثال كامل:

    دعنا نقوم بتوسيع الشيفرة السابقة لتظهر كيفية استخدام متغير لتاريخ اليوم وتحسين قراءة الشيفرة:

    php
    use Carbon\Carbon; $currentDate = Carbon::today()->format('d.m.Y'); @if($event[$i]->created_at->format('d.m.Y') == $currentDate) // هنا يمكنك وضع الشيفرة التي تريدها في حال كان التاريخ يوم اليوم // على سبيل المثال، تغيير لون التاريخ ليظهر بشكل مختلف @endif ?>

    الاستنتاج:

    باستخدام مكتبة Carbon في Laravel 5، يمكنك بسهولة التحقق مما إذا كان تاريخ معين يمثل “اليوم” أو لا. بالإضافة إلى ذلك، من خلال تخزين تاريخ اليوم في متغير، يمكنك جعل الشيفرة أكثر قراءة وإمكانية صيانة. هذا يسمح لك بتعديل شكل التاريخ بسهولة في المستقبل دون الحاجة إلى تغيير الشيفرة في أكثر من مكان.

  • استخراج الاسم المضيف والنطاق الفرعي في Laravel 5

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

    للقيام بذلك، يمكنك الاعتماد على خاصية getHost() المتوفرة في كائن الطلب (Request object). تُستخدم هذه الخاصية لاسترداد اسم المضيف (المضيف الرئيسي) من الطلب. ومن ثم، إذا كنت بحاجة إلى الحصول على النطاق الفرعي أيضًا، يمكنك استخدام الطرق المتاحة في PHP لفصل النطاق الفرعي من اسم المضيف.

    هذا مثال بسيط يوضح كيفية القيام بذلك:

    php
    use Illuminate\Http\Request; Route::get('/example', function (Request $request) { // Get the HTTP host $host = $request->getHost(); // Separate the subdomain if available $subdomain = explode('.', $host)[0]; // If you need the full subdomain including the domain, you can use: // $subdomain = str_replace('.' . config('app.domain'), '', $host); // Now you have both the full host and the subdomain return response()->json([ 'host' => $host, 'subdomain' => $subdomain, ]); });

    في هذا المثال، نقوم بالتقاط كائن الطلب واستخدام الدالة getHost() للحصول على اسم المضيف. ثم، باستخدام explode() نقوم بفصل اسم المضيف إلى جزئين بناءً على النقاط (dots)، حيث يكون الجزء الأول هو النطاق الفرعي، والجزء الثاني هو النطاق الرئيسي. يتم تخزين النطاق الفرعي في المتغير $subdomain، ويمكن استخدامه بما يتناسب مع متطلبات التطبيق الخاص بك.

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

    المزيد من المعلومات

    بالطبع، يمكننا أن نوسع قليلاً على الموضوع ونتناول بعض النقاط الإضافية لتوضيح السياق وتعميق الفهم.

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

    في المثال السابق، استخدمنا دالة getHost() للحصول على اسم المضيف، ومن ثم قمنا بفصل النطاق الفرعي باستخدام explode()، وهذا يعتبر حلاً بسيطًا وفعّالًا. ومع ذلك، يجب مراعاة بعض النقاط الإضافية لتعزيز القابلية للتطوير والأداء.

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

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

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

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

  • مشكلة Database not configured في Laravel

    عند مواجهتك لمشكلة “Database [compgen] not configured” في تطبيقك Laravel 5، تحتاج إلى إجراء بعض الخطوات للتأكد من أن إعدادات قاعدة البيانات متماشية ومُعينة بشكل صحيح. دعني أشرح لك الخطوات التي يمكن اتخاذها لحل هذه المشكلة:

    أولاً وقبل كل شيء، تأكد من أنك قد قمت بإعداد قاعدة البيانات الجديدة بشكل صحيح في phpMyAdmin وقمت بإنشاء الجداول المطلوبة.

    ثانياً، تحقق من ملف الـ .env في مشروعك Laravel وتأكد من أن إعدادات قاعدة البيانات تتطابق مع الإعدادات الصحيحة. يبدو أن الإعدادات التي وضعتها هي:

    makefile
    DB_HOST=localhost DB_DATABASE=test DB_USERNAME=root DB_PASSWORD=123

    تأكد من أن هذه الإعدادات صحيحة وتتطابق مع قاعدة البيانات التي قمت بإنشائها في phpMyAdmin.

    ثالثاً، تحقق من ملف config/database.php في مشروعك Laravel. هذا الملف يحتوي على إعدادات قاعدة البيانات لتطبيقك. تأكد من أن الإعدادات الخاصة بالاتصال بقاعدة البيانات تتطابق مع الإعدادات التي وضعتها في ملف الـ .env. هنا هو قسم من ملف config/database.php الذي يتعلق بقاعدة البيانات MySQL:

    php
    'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'test'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', '123'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => 'test_', 'strict' => false, ],

    تأكد من أن القيم المستردة باستخدام دالة env تتطابق مع القيم التي وضعتها في ملف الـ .env.

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

    باتباع هذه الخطوات، يجب أن تتمكن من حل مشكلة “Database [compgen] not configured” في تطبيقك Laravel والتمكن من الوصول إلى قاعدة البيانات بنجاح.

    المزيد من المعلومات

    بمواجهة مشكلة “Database [compgen] not configured” في تطبيق Laravel 5، يمكن أن يكون هناك عدة عوامل قد تسببت في ذلك، ولذلك يجب التحقق من كل واحدة منها بدقة لإصلاح المشكلة.

    ربما كانت أحد الأسباب الشائعة لهذه المشكلة هو عدم تشغيل خادم MySQL أو وجود مشكلة في الاتصال بقاعدة البيانات. في هذه الحالة، يجب عليك التحقق من تشغيل خدمة MySQL والتأكد من أن البيانات الصحيحة مُعطاة في ملف .env.

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

    بعد ذلك، يُنصح بتنفيذ أوامر “php artisan cache:clear” و “php artisan config:cache” لتحديث أي تكوينات مخبأة في ذاكرة التخزين المؤقت.

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

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

    في النهاية، يجب أن يكون تصحيح مشكلة “Database [compgen] not configured” في Laravel متعلقًا بتحقيق التطابق بين إعدادات قاعدة البيانات وتكوينات التطبيق، بالإضافة إلى ضمان سلامة الاتصال بقاعدة البيانات وصلاحيات المستخدم المناسبة.

  • تأمين كلمات المرور في Laravel 5

    بدايةً، يُلاحظ أن وظيفة “bcrypt” في Laravel تستخدم لتشفير كلمات المرور بشكل آمن، مما يزيد من مقاومتها لعمليات الاختراق والهجمات السيبرانية. ومن الطبيعي الحصول على قيم مختلفة عند تشفير نفس السلسلة بشكل متكرر باستخدام هذه الوظيفة.

    يتم ذلك لضمان أعلى مستوى من الأمان، حيث يتم إضافة عامل عشوائي (salt) مختلف في كل مرة يتم فيها تشفير السلسلة. يعمل هذا العامل على تعقيد عملية فك تشفير الكلمة المرورية، حتى في حالة تسرب جدول الهاشات (hash table)، مما يجعل من الصعب استنتاج الكلمات المرور الأصلية.

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

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

    المزيد من المعلومات

    بالطبع، دعنا نوسع على هذا الموضوع بمزيد من المعلومات:

    1. عوامل العشوائية (Salt):

      • يُستخدم العامل العشوائي (salt) في تشفير كلمات المرور لإضافة عنصر عشوائي إلى العملية، مما يجعل من الصعب على المهاجمين توقع الهاش الناتج.
      • يتم تضمين العامل العشوائي في الهاش النهائي، مما يعني أن نفس الكلمة المرورية ستترجم إلى هاش مختلف في كل مرة بسبب العشوائية المضافة.
      • هذا النهج يزيد من صعوبة الهجمات التي تعتمد على جداول الهاشات (Rainbow Tables)، حيث يجب أن تكون الجداول ضخمة وتحتوي على كل احتمالات الهاشات الممكنة مع العوامل العشوائية.
    2. تطبيقات أمان كلمات المرور الأخرى:

      • إضافة إجراءات أمان إضافية يمكن أن تشمل التحقق بخطوتين والتي تطلب من المستخدمين إدخال رمز أمان إضافي بجانب كلمة المرور.
      • يمكن أيضًا تنفيذ سياسات تعقيد كلمات المرور مثل تحديد طول الكلمة المرورية واستخدام مزيج من الحروف الكبيرة والصغيرة والأرقام والرموز.
    3. التحديثات الأمنية:

      • من الضروري تحديث البرمجيات بانتظام لضمان سد الثغرات الأمنية المكتشفة في إصدارات سابقة.
      • تقديم التحديثات الأمنية يساعد في الحفاظ على سلامة نظام المعلومات وحمايته من الهجمات السيبرانية المحتملة.
    4. تقنيات التشفير الأخرى:

      • بالإضافة إلى bcrypt، هناك تقنيات أخرى لتشفير كلمات المرور مثل Argon2 وPBKDF2. توفر هذه التقنيات مستويات مختلفة من الأمان والأداء، وقد يكون من المفيد استخدامها حسب متطلبات التطبيق الخاص بك.
    5. التخزين الآمن للكلمات المرور:

      • يجب تخزين كلمات المرور المشفرة بشكل آمن في قاعدة البيانات باستخدام تقنيات تشفير قوية مثل bcrypt.
      • يُنصح بعدم تخزين كلمات المرور بوضوح داخل قاعدة البيانات أو على السيرفر بحيث يمكن للمهاجمين الوصول إليها بسهولة في حالة اختراق النظام.

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

  • فرق save() و create() في Laravel 5

    في Laravel 5، توفر الإطار الأساسي Eloquent العديد من الطرق لحفظ السجلات في قاعدة البيانات، واثنين من هذه الطرق الشائعة هما استخدام الدالة save() والدالة create().

    الفارق الرئيسي بين الدالتين يكمن في الطريقة التي تستخدمها لحفظ السجلات. دعونا نلقي نظرة على كل منهما بالتفصيل:

    1. الدالة save():

      • تستخدم الدالة save() لحفظ سجل موجود بالفعل في القاعدة. بمعنى آخر، تستخدم هذه الدالة عندما تكون لديك نموذج موجود بالفعل وترغب في تحديثه في قاعدة البيانات بعد إجراء التغييرات عليه.
      • على سبيل المثال، إذا كنت تحمل نموذج “User” بالفعل وقمت بتحديث بياناته، يمكنك استخدام الدالة save() لحفظ التغييرات.
    2. الدالة create():

      • تستخدم الدالة create() لإنشاء سجل جديد وحفظه في قاعدة البيانات مباشرة.
      • هذه الدالة تكون مفيدة جدًا عندما تحتاج إلى إنشاء سجل جديد دون الحاجة إلى إنشاء نموذج وتعبئة البيانات يدويًا ثم حفظه.

    بشكل عام، يمكن استخدام الدالة save() عندما تحتاج إلى تحديث سجل موجود، بينما يمكن استخدام الدالة create() عندما تحتاج إلى إنشاء سجل جديد. يُلاحظ أنه يمكن استخدام الدالة save() أيضًا لحفظ سجل جديد إذا كان النموذج محملاً بالفعل بالبيانات الصحيحة.

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

    المزيد من المعلومات

    بالطبع، دعني أوسع شرحي للفرق بين الدالتين وأضيف بعض المعلومات الإضافية:

    1. الدالة save():

      • عند استخدام الدالة save()، يتوجب عليك أولاً الحصول على نموذج معين من قاعدة البيانات. بمعنى آخر، يجب أن يكون لديك نموذج موجود بالفعل وقيم في الخصائص التي ترغب في تحديثها.
      • بعد ذلك، يمكنك تغيير القيم في النموذج حسب الحاجة، ثم استدعاء الدالة save() لحفظ التغييرات في قاعدة البيانات.
      • عمومًا، تستخدم الدالة save() لعمليات الحفظ (التحديث) بعد أن تكون قد أجريت التعديلات المطلوبة على السجل.
    2. الدالة create():

      • بالنسبة للدالة create()، فإنها تأخذ مصفوفة من البيانات كمدخلات وتنشئ سجل جديد في قاعدة البيانات باستخدام هذه البيانات.
      • هذه الدالة تعتبر مفيدة جدًا عندما تحتاج إلى إنشاء سجل جديد مع القيم المحددة مسبقًا، ويمكنك تمرير هذه القيم مباشرة إلى الدالة create() بدلاً من الحاجة إلى تعبئة كل خاصية من النموذج بشكل منفصل.
      • يمكنك استخدام الدالة create() لتخليق سجل جديد دون الحاجة إلى استرجاع نموذج فارغ أولاً ومن ثم تعبئته بالبيانات وحفظه.
    3. الفارق في الاستخدام:

      • إذا كنت تعمل على تعديل بيانات سجل موجود، فيمكنك استخدام الدالة save().
      • إذا كنت تحتاج إلى إنشاء سجل جديد في قاعدة البيانات، فيمكنك استخدام الدالة create().
    4. استخدامات إضافية:

      • يمكنك أيضًا استخدام الدالة save() لحفظ العلاقات بين السجلات في الحالات التي تتطلبها.
      • بالمقابل، قد تحتاج أحيانًا إلى إجراء مزيد من المعالجة بعد إنشاء سجل جديد، وفي هذه الحالات يمكنك الاستفادة من حدث إنشاء النموذج (creating) للقيام بالإجراءات اللازمة.

    باختصار، فإن فهم الاختلاف بين الدالتين ومتى ينبغي استخدام كل منهما يساعدك في تنظيم وكتابة الكود بشكل أكثر فعالية وفعالية في Laravel.

  • حل مشكلة أمر ‘infyom:scaffold’ في Laravel 5

    في بيئة Laravel 5، يُستخدم الأمر Artisan لتنفيذ مجموعة متنوعة من المهام، ومنها أوامر السكافولد التي يقوم InfyOm بتوفيرها. من خلال الرمز الذي قدمته في الواجهة، يظهر أنك تحاول تنفيذ الأمر “infyom:scaffold” باستخدام فئة Artisan.

    من المهم أولاً التأكد من أن حزمة InfyOm مثبتة بشكل صحيح في مشروع Laravel الخاص بك. يمكنك استخدام Composer لتثبيت الحزمة بواسطة الأمر:

    bash
    composer require infyomlabs/laravel-generator

    بعد التأكد من تثبيت الحزمة، يجب عليك التحقق من أن الأمر “infyom:scaffold” متاح في بيئة التطوير. قد يكون الخطأ الذي تظهره “There are no commands defined in the ‘php artisan infyom’ namespace” يشير إلى أن الأمر غير متاح أو أن الحزمة لم تتم تكوينها بشكل صحيح.

    للتحقق من ذلك، يمكنك استخدام الأمر التالي في CMD:

    bash
    php artisan list

    هذا الأمر يعرض قائمة بجميع الأوامر المتاحة في بيئة Laravel الحالية. تأكد من أن “infyom” و “infyom:scaffold” تظهر في القائمة.

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

    المزيد من المعلومات

    من الواضح أن لديك تحدي في تنفيذ أمر “infyom:scaffold” من خلال تطبيق Laravel الخاص بك. دعنا نقوم بفحص بعض النقاط الأخرى التي قد تساعد في حل هذا التحدي.

    أولاً وقبل كل شيء، تأكد من أنك قمت بتحديث ملف البيئة .env الخاص بك بشكل صحيح ليحتوي على إعدادات قاعدة البيانات الصحيحة وأي إعدادات أخرى ذات صلة. يمكنك استخدام أمر Artisan للتحقق من الإعدادات:

    bash
    php artisan config:cache

    ثم يُفضل إعادة تشغيل خادم التطوير الخاص بك بعد تحديث ملف البيئة.

    ثانياً، تأكد من أن الحزمة المسؤولة عن الأمر “infyom:scaffold” مثبتة ومحدثة بشكل صحيح. يمكنك تحديثها باستخدام Composer:

    bash
    composer require infyomlabs/laravel-generator

    بعد ذلك، قم بتحديث الأمر Artisan مرة أخرى:

    bash
    php artisan config:cache

    ثم أعد تشغيل خادم التطوير.

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

    php
    \Artisan::call("infyom:scaffold {$request['name']} --fieldsFile=public/Product.json");

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

    في حال استمرار المشكلة، يمكنك أن تقوم بالبحث في منتديات Laravel أو GitHub لمشاكل مماثلة أو الرجوع إلى وثائق الحزمة التي تستخدمها للحصول على مساعدة إضافية.

  • فهم الاختلاف بين save() و attach() في Laravel 5

    في Laravel 5، عندما يكون لديك علاقة “الكثير إلى الكثير” بين نموذجين، مثل العلاقة بين المستخدمين والأدوار، يمكنك استخدام الأساليب save() و attach() لحفظ العلاقة بينهما. ورغم أن الهدف الرئيسي لكل من هاتين الطرق هو إقامة علاقة، إلا أن هناك بعض الاختلافات الدقيقة تستحق التوضيح.

    عند استخدام save()، يتم استخدامها عادة عندما تكون لديك بالفعل نموذج للعلاقة الفرعية وتحتاج إلى حفظها. في حالتك، يظهر الكود التالي:

    php
    $user->roles()->save($role, ['expires' => $expires]);

    هنا، يتم حفظ العلاقة مباشرة بين المستخدم والدور الذي تم توفيره كنموذج.

    بالمقابل، attach() تُستخدم عندما تكون لديك معرفات أولية للنماذج المراد ربطها ببعضها البعض، دون الحاجة إلى إنشاء نموذج بالفعل. في حالتك، يمكنك استخدام الكود التالي:

    php
    $user->roles()->attach($roleId, ['expires' => $expires]);

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

    عند النظر إلى الفارق بينهما، يكمن الاختلاف الرئيسي في الطريقة التي تتم بها عملية الحفظ. save() تأخذ نموذجًا كمدخل، في حين أن attach() تأخذ معرفًا. يمكن القول إن استخدام save() يتيح لك مزيدًا من المرونة في التحكم بخصائص العلاقة قبل الحفظ.

    بشكل عام، يعتبر الاختيار بين save() و attach() يعتمد على السياق الخاص بتطبيقك. إذا كنت تمتلك نموذجًا جاهزًا للعلاقة وتريد تخصيص المزيد من التفاصيل قبل الحفظ، استخدم save()، وإذا كنت تعمل بمعرفات مسبقة وتحتاج فقط إلى إنشاء ربط، استخدم attach().

    لاحظ أنه يمكنك أيضًا استخدام sync() لتحديث العلاقة بشكل كامل بناءً على مجموعة معينة من المعرفات، وهي خيار آخر يعتمد على احتياجات تطبيقك المحددة.

    المزيد من المعلومات

    بالتأكيد، دعونا نستكمل التحليل ونضيف المزيد من المعلومات حول استخدام الأساليب save() و attach() في Laravel 5 في سياق العلاقات “الكثير إلى الكثير”.

    1. تحديث العلاقة:

      • عند استخدام save()، يمكنك أيضًا استخدامها لتحديث العلاقة بين النموذجين. على سبيل المثال، إذا كان لديك نموذج مستخدم (User) لديه عدة أدوار (Role)، يمكنك تحديث العلاقة بسهولة عن طريق تعديل الخصائص المطلوبة في نموذج الدور ثم استخدام save().
      php
      $user->roles()->save($role, ['expires' => $newExpires]);

      هذا يعتبر تحديثًا مباشرًا للعلاقة، وسيتم حفظ التغييرات في قاعدة البيانات.

    2. العمليات الإضافية مع attach():

      • عند استخدام attach()، يمكنك أيضًا القيام بعمليات إضافية مثل إزالة العلاقة أو تعديل الخصائص بعد الإرفاق. مثلاً:
      php
      $user->roles()->attach($roleId, ['expires' => $expires]); $user->roles()->detach($roleId); // لإزالة العلاقة

      يسمح attach() بمرونة أكبر في إدارة العلاقات بشكل مباشر وتنفيذ عمليات إضافية عليها.

    3. الأداء:

      • يجب أن تأخذ في اعتبارك أيضًا أداء الاستعلامات. في بعض الحالات، قد تكون save() أكثر كفاءة من attach()، حيث تستخدم save() إدخال نموذج مباشر بينما يتعين على attach() تحديد معرف النموذج فقط.
    4. استخدام sync() لتحديث العلاقة:

      • إذا كانت لديك مجموعة من المعرفات وترغب في تحديث العلاقة بأكملها، فيمكنك استخدام sync():
      php
      $user->roles()->sync([$roleId1, $roleId2], ['expires' => $expires]);

      هذا سيقوم بتحديث العلاقة بناءً على المعرفات المقدمة وقد يكون أكثر كفاءة في بعض الحالات.

    باختصار، استخدام save() و attach() يعتمد على حاجات تطبيقك الخاصة. توفر Laravel هذه الأساليب المختلفة لتلبية متطلبات البرمجة المتنوعة، ويمكنك اختيار الأسلوب الذي يناسب سياق عملك وتطبيقك بشكل أفضل.

  • بناء تطبيق Todo List بلغة Laravel 5: دليل تفصيلي

    في هذا الدليل الشامل، سنستكشف معًا عملية إنشاء تطبيق Todo List باستخدام إطار العمل Laravel 5. سنغوصل خطوة بخطوة من البداية حتى النهاية، مما يمكنك من فهم العمليات والمفاهيم المتورطة في تطوير تطبيق ويب بسيط ولكنه فعال.

    الخطوة 1: تثبيت Laravel

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

    bash
    composer create-project --prefer-dist laravel/laravel todo-list

    سيقوم هذا بتحميل Laravel وتثبيته في دليل جديد يسمى “todo-list”.

    الخطوة 2: إعداد قاعدة البيانات

    في الملف .env الذي يقع في مجلد تطبيق Laravel الخاص بك، قم بتكوين إعدادات قاعدة البيانات الخاصة بك، مثل اسم قاعدة البيانات واعتمادات الوصول.

    env
    DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=اسم_قاعدة_البيانات DB_USERNAME=اسم_المستخدم DB_PASSWORD=كلمة_المرور

    الخطوة 3: إنشاء نموذج Todo

    قم بإنشاء نموذج Eloquent لتمثيل مهام Todo. في مجلد app، أنشئ ملفًا جديدًا بعنوان Todo.php. استخدم الأمثلة التالية كنقطة انطلاق:

    php
    namespace App; use Illuminate\Database\Eloquent\Model; class Todo extends Model { protected $fillable = ['task', 'completed']; }

    الخطوة 4: إنشاء وحدة تحكم TodoController

    أنشئ وحدة تحكم جديدة باستخدام الأمر Artisan:

    bash
    php artisan make:controller TodoController

    سينشئ هذا وحدة تحكم جديدة في app/Http/Controllers بعنوان TodoController.php.

    الخطوة 5: تعريف الطرق في TodoController

    افتح TodoController.php وقم بتعريف الطرق الأساسية التي سنحتاجها، مثل العرض والإضافة والتحديث والحذف.

    الخطوة 6: إعداد العرض في العرض

    قم بإعداد العرض في ملف resources/views/welcome.blade.php ليظهر قائمة Todo ونموذج إضافة Todo.

    الخطوة 7: تكامل الطرق مع النموذج وقاعدة البيانات

    اتصل بنموذج Todo واجعل الطرق تتفاعل مع قاعدة البيانات. يمكنك استخدام Eloquent لتسهيل هذه العملية.

    الخطوة 8: تنسيق وتصميم الواجهة

    استخدم CSS و JavaScript لتنسيق وتحسين واجهة المستخدم الخاصة بك. يمكنك استخدام Bootstrap أو أي إطار تصميم آخر حسب تفضيلك.

    الخطوة 9: اختبار التطبيق

    قم بتشغيل خادم التطوير المدمج في Laravel باستخدام الأمر:

    bash
    php artisan serve

    وبعد ذلك، قم بفتح المتصفح وانتقل إلى http://localhost:8000 لرؤية تطبيق Todo List الخاص بك.

    الخطوة 10: التحسينات والإضافات المستقبلية

    في المستقبل، يمكنك استكمال التحسينات مثل إضافة تسجيل الدخول والتحقق من صحة البيانات. كما يمكنك بناء وظائف إضافية مثل تحديد المهام المكتملة وترتيبها.

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

    المزيد من المعلومات

    بالتأكيد، سنوسع المعلومات حول عملية إنشاء تطبيق Todo List باستخدام Laravel 5 ونضيف بعض التفاصيل حول بعض الجوانب الهامة لهذا البرنامج.

    الخطوة 5: تعريف الطرق في TodoController

    قم بتحديد الطرق في TodoController.php باستخدام الأمثلة التالية:

    php
    public function index() { $todos = Todo::all(); return view('todos.index', compact('todos')); } public function create() { return view('todos.create'); } public function store(Request $request) { $validatedData = $request->validate([ 'task' => 'required|max:255', ]); Todo::create($validatedData); return redirect('/todos')->with('success', 'Task added successfully!'); } public function edit(Todo $todo) { return view('todos.edit', compact('todo')); } public function update(Request $request, Todo $todo) { $validatedData = $request->validate([ 'task' => 'required|max:255', 'completed' => 'boolean', ]); $todo->update($validatedData); return redirect('/todos')->with('success', 'Task updated successfully!'); } public function destroy(Todo $todo) { $todo->delete(); return redirect('/todos')->with('success', 'Task deleted successfully!'); }

    الخطوة 6: إعداد العرض في العرض

    في resources/views/welcome.blade.php، قم بتحديد العرض كالتالي:

    php
    @foreach($todos as $todo)

    {{ $todo->task }}

    "/todos/{{ $todo->id }}" method="POST"> @csrf @method('DELETE')
    @endforeach

    الخطوة 7: تكامل الطرق مع النموذج وقاعدة البيانات

    تأكد من تكامل الطرق مع النموذج Todo والتفاعل مع قاعدة البيانات. ضمن هذا السياق، يمكنك استخدام طرق النموذج Eloquent للتفاعل مع البيانات بشكل فعال.

    الخطوة 8: تنسيق وتصميم الواجهة

    قم بتصميم وتنسيق واجهة المستخدم باستخدام CSS و JavaScript. يمكنك استخدام مكتبات مثل Bootstrap لجعل التصميم أكثر جاذبية واستجابة.

    الخطوة 9: اختبار التطبيق

    استخدم PHPUnit أو أي أداة اختبار تفضلها لضمان أن تطبيقك يعمل بشكل صحيح ولا يحتوي على أخطاء.

    الخطوة 10: التحسينات والإضافات المستقبلية

    يمكنك استمرار تحسين تطبيقك باستخدام Laravel Mix لإدارة الملفات الثابتة وتحسين الأداء. يمكنك أيضاً إضافة ميزات إضافية مثل فرز المهام وتسجيل الدخول للمستخدمين.

    باختصار، إنشاء تطبيق Todo List باستخدام Laravel 5 يتضمن تكامل مكونات Laravel المختلفة بشكل فعّال وتصميم واجهة مستخدم تفاعلية لتحسين تجربة المستخدم. يمكنك دائمًا استكشاف المزيد من ميزات Laravel وتقنيات التطوير لتحسين وتوسيع تطبيقك.

  • تصميم وتطوير تطبيق Todo List بلغة Laravel 5: دليل شامل

    في الجزء الثاني من رحلتنا لإنشاء تطبيق “Todo List” باستخدام Laravel 5، سنستكمل الخطوات اللازمة لتطوير تطبيق يتيح للمستخدمين إضافة المهام، وتعديلها، وحذفها. سنركز على بناء واجهة المستخدم، وربطها بالمتحكمات في Laravel، بحيث يكون التفاعل مع قاعدة البيانات سلسًا وفعّالًا.

    لنبدأ بإنشاء نموذج Eloquent للمهام. يمكننا استخدام الأمر Artisan لإنشاء نموذج بسرعة:

    bash
    php artisan make:model Task -m

    سيقوم هذا الأمر بإنشاء ملف النموذج Task في مجلد app، بالإضافة إلى ملف الهجرة (migration) الخاص به. قم بفتح ملف الهجرة وقم بتعديله ليتناسب مع هيكل الجدول الذي نريد.

    ثم، قم بتشغيل الهجرة لإنشاء الجدول في قاعدة البيانات:

    bash
    php artisan migrate

    الآن، سنقوم بتحديد وتنفيذ العمليات الأساسية (إضافة، تحديث، حذف) للمهام. في ملف التحكم (Controller)، قم بتعريف وتنفيذ الدوال الضرورية، مثل index لعرض جميع المهام، و create و store لإضافة مهمة جديدة، وهكذا.

    في الجزء الثاني، يجب أن ننشئ واجهة المستخدم باستخدام HTML وCSS. يمكننا استخدام محرر النصوص المفضل لدينا لإنشاء صفحات العرض والإضافة والتعديل. ضع في اعتبارك استخدام Blade، المحرك القوي للقوالب المدمج في Laravel، لتحسين إعادة استخدام الأكواد وجعل التصميم أكثر هيكلة.

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

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

    باستخدام هذه الخطوات، ستكون قادرًا على إنشاء تطبيق Todo List بسيط وفعّال باستخدام Laravel 5، مما يوفر للمستخدمين واجهة سهلة الاستخدام وتفاعلية مع مهامهم اليومية.

    المزيد من المعلومات

    في السياق الثاني لإنشاء تطبيق Todo List باستخدام Laravel 5، سنعزز تفاصيل التصميم ونضيف بعض الميزات الإضافية لتحسين تجربة المستخدم. سنركز على تحسين وتنظيم واجهة المستخدم وتقديم بعض الوظائف المتقدمة.

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

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

    لتحسين أمان التطبيق، يمكنك تطبيق أوامر حماية CSRF والتحقق من صحة البيانات المدخلة. كما يمكنك استخدام طرق التحقق (Authentication) في Laravel لتأمين المناطق ذات الصلة.

    لا تنسَ أيضًا توثيق التطبيق بشكل جيد، مما يجعله أسهل للمطورين الآخرين فهم كيفية استخدام التطبيق وتوسيعه.

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

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر