-
المساهمات
3558 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
34
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو سمير عبود
-
الفكرة ليست في معرفة التقنية أو الخاصيات المستخدمة في التقنية، يمكنك تحصيل هذا الشيء من أي مصدر أو محتوى ترتاح له، التحدي الأكبر يكمن في إكتسابك لمهارة توظيف تلك الخصائص معاً او تلك التقنية في تحقيق أهداف معينة. لنأخذ على سبيل الصندوق المرن (Flex Box) هو أسلوب يمكن إستعماله حالياً لتنفيذ تخطيطات معقدة بشكل بسيط. (تلك التصاميم والتخطيطات كان تنفيذها معقد وصعب في السابق). سأرشح لك المقالات التالية لأخذ الأفكار الأساسية حول هذه المواضيع: مدخل إلى تخطيط صفحات الويب باستخدام CSS الأساليب القديمة في تخطيط صفحات الويب تخطيط الصندوق المرن Flexbox في صفحات الويب تخطيط صفحات ويب باستخدام تخطيط الشبكة Grid في CSS أو يمكنك أخذ أساسيات هذه المواضيع من خلال المقاطع على يوتيوب، الأمر راجع لك في اختيار ما يناسبك. بعدها يأتي التحدي الأكبر وهو محاولة تطبيق تخطيطات معينة سواء من خيالك أو من خلال الإنترنت (فقط عدد معين من الأفكار ومع الممارسة أكثر سيترسخ الفهم لديك) إليك بعض الأفكار البسيطة: شبكة صور بسيطة (معرض صور) قسم خدمات الشركة في صفحات الهبوط الخطط والأسعار فريقنا (بطاقات لفريق العمل في الشركة) قسم تفاصيل المنتج (القسم الذي نراه في المتاجر الإلكترونية - صور المنتج في جهة متوزعة بشكل منظم و تفاصيل المنتج في جهة { العنوان، الوصف، السعر وما إلى ذلك }) يمكنك الحصول على أفكار أخرى مختلفة من خلال الإنترنت وتصفح المواقع المشهورة بعد تطبيقك وتنفيذك لهذه الأفكار ستلمس بشكل أكبر أهمية هذه التقنيات والهدف منها وستتعلمها بعمق. بالتوفيق.
-
رائع جداً أنّك بدأت دراسة وتعلم مجال كالذكاء الاصطناعي في هذا العمر المبكر! هذا بحدّ ذاته إنجاز كبير ويُظهر شغفًا حقيقيًا لديك، حاول عدم الضغط على نفسك بشكل كبير فلديك الوقت أمامك لتحقيق إستفادة كبيرة. مع قليل من التنظيم والموازنة بين الدراسة والرياضة والدورة ستُحقق مبتغاك. إليك بعض النصائح التي من الممكن أن تساعدك في رحلتك التعليمية: الثبات أهم بكثير من الساعات الطويلة المتقطّعة، خصص وقت ثابت للمتابعة والتعلم خلال الأسبوع (مثلاً ساعتين او ساعتين ونصف خلال اليوم لأربعة أيام في الأسبوع) وسيتبقى لك وقت كافي لدراستك في المدرسة الحكومية وممارسة نشاطاتك الأخرى. بعد أي محاضرة او فيديو حاول تطبيق ما تعلمته فوراً عبر تجربة الأكواد وتنفيذ مشاريع مصغرة. التطبيق العملي يرسّخ المفاهيم أسرع من الدراسة النظرية وحدها إختر مشاريع شخصية صغيرة قريبة من إهتماماتك وتفضيلاتك وحاول تنفيذها. مثلأً تحليل بيانات اللاعبين والمباريات هذا يجعلك متحمساً للتعلم أكثر. دوّن ملاحظاتك وارفع التطبيقات والمشاريع التي تقوم بها على Github أو أي منصة مشابهة مع الوقت سيصبح لديك معرض أعمال قوي وتزداد خبرتك في المجال. بالتوفيق.
- 2 اجابة
-
- 1
-
-
الأمر يعتمد عليك في النهاية، Laravel UI يأتي مهيأ بشكل إفتراضي مع إطار العمل Bootstrap بعكس Laravel Breeze الذي يأتي مهيأ مع TailwindCSS. عند تنفيذ: composer require laravel/ui php artisan ui bootstrap --auth ستحصل على ملفات Blade مبنية على Bootstrap مباشرة. فلا تحتاج إلى تعديلات كبيرة على الـ CSS أو الهيكلة. أما لو اخترت Laravel Breeze و أردت إستخدام Bootstrap معه ستضطر إلى: إزالة او تعطيل إعدادات Tailwind. تثبيت Bootstrap وإعادة كتابة الـ views أو تعديل الـ Blade components لتتناسب مع Bootstrap. هذا يعني وقتًا إضافيًا وجهدًا أكبر للبدأ في الكتابة او العمل على متطلبات المشروع الأساسية. في السابق كانت توجد حزم لتقديم Breeze مع Bootstrap فهي توفر ذلك الوقت الذي كنت ستقضيه في تعديل الملفات والـ views لتناسب Bootstrap في الوقت الحالي لا أدري وضعها. لكن الأمر ليس بذلك التعقيد يمكنك القيام به بشكل يدوي. يوجد أيضاً خيار Laravel Jetstream فهو مثل Breeze لكنه يوفر خصائص وميزات أكبر. ويوجد أيضاً خيار Laravel Fortify لوحده فهو يوفر المتحكمات و جانب الـ Backend لعمليات المصادقة وتسجيل الدخول وهو مستخدم بشكل إفتراضي مع كل من Breeze و Jetstream لكنه لا يوفر الـ Frontend و ملفات العروض و الإعدادات الخاصة بهذا الجانب، الأمر متروك للمطور لإختيار وإستخدام ما يشاء. لكل من هذه الخيارات حالات إستخدام معينة والأمر في الأخير يرجع للمطور. خلاصة الأمر إذا كنت مبتدئ وتريد أسرع طريقة مع Bootstrap إستخدم Laravel UI، إذا كنت تملك الوقت ولا تمانع في بذل جهد للتخصيص اليدوي يمكنك إختيار Breeze وتخصيص الواجهات لتعمل مع Bootstrap. إذا كنت ترغب في تخصيص من الصفر للواجهات والأدوات يمكنك الذهاب مع خيار Fortify ثم إضافة ما يناسبك. إذا كنت تحتاج إلى الميزات التي يقدمها Jetstream و القصد هنا جلسات المتصفح والمصادقة الثنائية، إدارة الفريق ... فالخيار هو Jetstream. في Laravel 12 تم تقديم مجموعات بدء (Starter Kits) جديدة، هذه المجموعات مُصمّمة لتسهيل بدء المشاريع مع واجهة + مصادقة + إعدادات جاهزة، وتركّب التقنية الأمامية التي تفضّلها، وجميع هذه المجموعات الجديدة تستخدم Tailwind CSS كمكتبة CSS افتراضية.
-
إن كنت تقصد ملخصات لدروس دورات الأكاديمية فهذا الشيء غير موجود والأمر متروك للطلاب لكتابة ملخصاتهم كيفما يشاؤون. فلكل طالب طريقة تناسبه ويرتاح لها. أما إن كنت تقصد مصادر أخرى للإستزادة و التعلم العميق فلديك موسوعة حسوب فهي توفر توثيق عربي كامل وعالي الجودة لمختلف لغات البرمجة وتقنيات تطوير الويب والجوال. أيضاً توفر الأكاديمية عدد كبير من المقالات في مختلف المجالات التقنية يمكنك الإطلاع على مقالات البرمجة مثلاً من خلال الرابط: مقالات البرمجة. أيضاً توجد كتب في مجال البرمجة: كتب برمجة: في الأسفل ترشيحات لبعض الكتب في اللغات التي ذكرتها: نحو فهم أعمق لتقنيات HTML5 ملاحظات للعاملين بلغة CSS البرمجة بلغة جافاسكربت و في الرابط المرفق في الأعلى كتب مختلفة يمكنك الإطلاع عليها.
-
لا يوجد ماهو أفضل في المجمل وبشكل عام بين Django و Flask. ذلك يعتمد على حالات الإستخدام وعلى التفضيلات الشخصية. فلكل إطار مميزات و عيوب وفي الأخير أنت من يحدد المناسب لك وللمشروع الذي تعمل عليه. بداية دعنا نعرف كل إطار و نبرز مميزات و عيوب كل منهما حتى يتسنى لك الإختيار وفق ما يتناسب مع حاجتك: Django: إطار عمل كامل مبني على بايثون، يوفّر لك كل شيء تقريبًا من البداية: نظام إدارة المستخدمين، ORM لربط قاعدة البيانات، لوحة تحكم جاهزة، حماية أمنية، قوالب HTML، إلخ. Flask: إطار عمل صغير (Microframework) وخفيف، يوفّر الأساسيات فقط (Routing، Request/Response)، وتضيف أنت باقي المكونات (قواعد البيانات، التوثيق، إلخ) عبر مكتبات خارجية حسب حاجتك. المميزات والعيوب: مميزات Django: يوفّر أدوات كثيرة جاهزة لتطوير سريع. نظام إدارة (Admin Panel) جاهز وقوي. ORM قوي للتعامل مع قواعد البيانات بسهولة. أمان عالي (CSRF, SQL Injection, XSS protection). مجتمع كبير ودعم واسع. عيوب Django: كبير الحجم وقد يكون زائدًا عن حاجتك إذا كان المشروع صغير. أقل مرونة إذا أردت الخروج عن "طريقة Django" في العمل. مميزات Flask: خفيف وسهل الفهم للمبتدئين. مرونة عالية حيث تختار الأدوات التي تناسبك. مناسب للمشاريع الصغيرة أو التي تحتاج تصميم مخصص جدًا. عيوب Flask: تحتاج إلى إضافة كافة المزايا الإضافية والتي لا يتيحها الإطار بنفسك قد تحتاج وقت أطول للبناء إذا كان المشروع كبير. متى تستخدم كل إطار؟ تستخدم Django إذا كنت تريد إنجاز مشروع كبير أو متوسط وبسرعة، أو إذا كنت ترغب بلوحة تحكم جاهزة وتنظيم محكم للكود. بينما تستخدم Flask إذا كنت تريد إنجاز مشروع صغير أو API خفيف، أو كنت تريد حرية كاملة ومرونة في إختيار المكونات بنفسك. في الأخير لا يوجد ماهو أفضل بشكل مطلق عندما نتحدث عن الأدوات البرمجية سواء لغات أو أطر عمل أو مكتبات فالأمر كما قلت في البداية راجع لحالات الإستخدام، نسبة تعقيد المشروع، متطلبات صاحب المشروع أو الشركة التي تعمل لديها، تفضيلات شخصية وما إلى ذلك من معايير وتحديدات.
-
إن كنت تريد مزامنة الملفات بين عدة أجهزة يُمكنك إستخدام برنامج syncthing وهو برنامج مفتوح المصدر يستخدم لمزامنة الملفات والمجلدات بين أجهزة متعددة بشكل آمن وسهل. يتيح لك البرنامج الحفاظ على نسخ متزامنة من الملفات عبر الأجهزة المختلفة، سواء كانت أجهزة كمبيوتر، خوادم، أو حتى أجهزة محمولة. من بين أهم المميزات أنه بسيط وسهل الإستعمال بالإضافة لأنه متعدد المنصات يعمل على معظم أنظمة التشغيل بما في ذلك Windows، macOS، Linux، و Android، تستطيع إستكشاف البرنامج وما يقدمه من مميزات من خلال يوتيوب يوجد عدة مقاطع تشرح ذلك. مستودع البرنامج على github : مستودع syncthing
- 3 اجابة
-
- 1
-
-
تحتاج إلى إضافة الحقل لإستمارة التسجيل: <div class="mt-4"> <x-label for="photo" value="{{ __('Photo') }}" /> <x-input id="photo" class="block mt-1 w-full" type="file" name="photo" /> </div> تحتاج التعديل على عُنصر الإستمارة بإضافة: <form method="POST" action="{{ route('register') }}" enctype="multipart/form-data"> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ بعدها تحتاج إلى التعديل على التابع المسؤول عن إضافة السجل: بإضافة التحقق: Validator::make($input, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => $this->passwordRules(), 'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '', 'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:1024'], // إضافة التحقق ])->validate(); ثم بعد إنشاء المستخدم تقوم بتعديل الصورة في حالة ما إذا كان الطلب به ملف صورة: $user = User::create([ 'name' => $input['name'], 'email' => $input['email'], 'password' => Hash::make($input['password']), ]); if (isset($input['photo'])) { $user->updateProfilePhoto($input['photo']); } return $user; تستطيع حفظ الصورة بنفسك قبل حفظ المستخدم، لكن بإمكانك أيضاً إستخدام نفس الخاصية الموجودة في التعديل، أي التابع updateProfilePhoto كما هو موضح أعلاه، التابع سيقوم بحفظ الصورة في المجلد storage و يُعدل على حقل الصورة في قاعدة البيانات أيضاً.
-
خاصية تعديل الصورة الشخصية للمستخدمين متاحة كخاصية إفتراضية في Jetstream، لا تحتاج إلى إنشائها من الصفر فقط عليك تفعيلها من خلال ملف الإعدادات: config/jetstream.php ستجد بداخل المفتاح features السطر التالي: Features::profilePhotos(), مُعلق قم بإزالة التعليق. ثم ستتمكن من التعديل على الصورة الشخصية من خلال صفحة ال profile، إن أردت شيء مغاير يُمكنك الإشارة.
-
يُمكنك إستخدام الدالة unlink في php لحذف أي ملف، وتمرير مسار الملف الذي تريد حذفه كوسيط أول للدالة.
- 10 اجابة
-
- 1
-
-
نعم بإمكانك ذلك، لكن ستنسخ بعض الأكواد فقط جزء التحقق من المدخلات و التي من بينها الصورة، أما الإستعلام سيتغير لأنك في هذه الحالة ستقوم بإستعلام تعديل أيضاً قد تحتاج إلى حذف الصورة السابقة في حالة تعديل الصورة كي لا تتكدس الصور لديك في مجلد التخزين بدون حاجة لها
- 10 اجابة
-
- 1
-
-
إذا كان قصدك الخاصية alt و القيمة التي وضعتها فهي قيمة إختيارية فقط، أما الخاصية فهي تعني النص البديل وهذا النص يظهر في حالة تعذر الوصول إلى الصورة.
- 10 اجابة
-
- 1
-
-
لا يمكنك وضع الصورة من خلال حقل file عليك وضعها من خلال عُنصر الصورة (img) أي أن كود php ستضعه من خلال الخاصية src في عُنصر الصورة (img)، يعني ستقوم بتعديل التالي: <img width="180" height="150" src="https://placehold.co/180x150" alt="image preview" id="preview"> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ بوضع مسار الصورة عن طريق php: <img width="180" height="150" src="<?php echo 'مسار الصورة' ?>" alt="image preview" id="preview"> أنا لا أعلم إسم الحقل الذي تخزن فيه مسار الصورة ولا كيف تقوم بتخزينها لكن أنت ملم بهذه المعطيات، فقط ستُعدل على ال 'مسار الصورة' بما يوافقها بعد جلبك للبيانات.
- 10 اجابة
-
- 1
-
-
لا يُمكنك وضع القيمة من خلال حقل الإدخال (input file) مباشرةً، تحتاج إلى إضافة عُنصر صورة (img) تحت الحقل file تعرض به الصورة من خلال المسار الخاص بها، ثم من خلال جافاسكربت يُمكنك إذا قام المستخدم بتغيير الصورة إلتقاط الحدث و التغيير على الصورة بحيث تظهر الجديدة التي اختارها، بعد ذلك إذا تم الضغط على زر التعديل ترسل الإستمارة إلى الخادم وتحفظ الصورة الجديدة: هنا شرح بسيط للعملية: <form action="" enctype="multipart/form-data"> <input type="file" id="file" name="file" accept="image/*" onchange="loadImage(event)"> <br><br> <img width="180" height="150" src="https://placehold.co/180x150" alt="image preview" id="preview"> </form> لاحظ العُنصر img (هو الذي نستخدمه لعرض الصورة، يُمكنك التعديل على الخاصية src بوضع مسار الصورة الخاصة بالسجل الذي تقوم بالتعديل عليه) أيضاً لاحظ عُنصر الإدخال استخدمنا الخاصية onchange لإلتقاط حدث التغيير وتنفيذ الدالة loadImage التي سنقوم بإنشائها عبر JavaScript: const loadImage = (event) => { const output = document.getElementById('preview'); output.src = URL.createObjectURL(event.target.files[0]); output.onload = function() { URL.revokeObjectURL(output.src) } } فقط نقوم بتحديد عُنصر الصورة من DOM ثم نُغير على الخاصية src بوضع الصورة الجديدة. المثال موجود على CodePen من هنا، هذه الفكرة بإختصار يُمكنك التعديل عليها حسب الحالة وإضافة التنسيقات المناسبة لك.
- 10 اجابة
-
- 1
-
-
إن كنت تقصد دورة مخصصة بشكل كامل لبناء تطبيقات الهاتف فهي غير موجودة، لكن توجد دورة تطوير التطبيقات باستخدام JavaScript التي تتكون من مسارات تم التطرق فيها إلى تطوير تطبيقات جوال بشكل كامل و شرح الأساسيات في بعض التقنيات وأطر العمل المستعملة في هذا المجال مثل React Native و Ionic. فإذا توجهت للصفحة الخاصة بهذه الدورة: دورة تطوير التطبيقات باستخدام لغة JavaScript ستجد المسارات التالية: تطوير تطبيق جوال باستخدام React Native تطبيق دردشة يشبه WhatsApp و هذا مسار يشمل تطبيق الويب بإستعمال node.js و react.js وتطبيق جوال بإستعمال React Native تطوير تطبيق جوال للتواصل الاجتماعي باستخدام Ionic وهذا المسار شامل لإطار العمل Ionic فهو يتكون من حوالي 111 درس موزعة على 16 ساعة لكن كما قلت فإن الدورة مخصصة للغة جافاسكربت والتطبيقات التي يمكن بناؤها بإستعمال هذه اللغة والتقنيات الخاصة بها، فستجد أنها تتكون أيضاً من مسارات إضافية لشرح أساسيات اللغة نفسها وشرح أساسيات NodeJs وأساسيات ReactJs، وأيضاً يوجد مسار لـ Typescript و مسار لإطار Electron.js المستعمل في بناء تطبيقات سطح المكتب و مسارات أخرى معظمها عملية تطبيقية يتم فيها بناء تطبيق معين. لذلك أعتقد أن هذه الدورة مناسبة لما تبحث عنه بقية الدورات تخص مجالات أخرى، لكن إن كنت تقصد شيئ آخر أو تقنيات أخرى غير التي ذكرتها يُمكن طرح تساؤلك أو تقديم إقتراحك على الإدارة من خلال مركز المساعدة، تحياتي.
- 1 جواب
-
- 1
-
-
دورة علوم الحاسوب هي عبارة عن حجر الأساس ونُقطة الإنطلاق لتعلم أحد المجالات والتخصص فيه، يُفترض أنه بعد إنهائك لهذه الدورة وفهم دروسها بالكامل أن تجد سهولة في إحتراف المجال الذي يناسبك وتبدأ رحلتك فيه. مسألة إختيار المجال تتعلق بك وبسوق العمل الذي تريد أن تستهدفه. أنصحك بالإطلاع على هذا المقال حتى تتضح لك الصورة وتُحدد الهدف الذي تريد بلوغه: تم التطرق في المقال لمعظم المجالات الموجودة وشرح مختصر للمجالات كما تم إرفاق مصادر لبداية تعلم كل مجال وإحترافه، بالتوفيق.
-
الموضوع مطول قليلاً لكنه بسيط فقط ستحتاج إلى إلمام بأساسيات الإطار يُمكنك الإطلاع على المقالات التي تخص لارافيل في الأكاديمية لفهم الموضوع بشكل أكبر. مبدئياً ستحتاج إلى نموذج بيانات (model) مربوط بجدول في قاعدة البيانات (migration)، مسارات (routes) تخص عمليات crud على النموذج يُمكن إستعمال مسار من النوع resource هنا لأنه يختصر كل المسارات في سطر واحد، متحكم (controller) لتحويل الطلبات إليه لمعالجتها وإرسال رد يوافق الطلب، من الممكن أن تحتاج إلى أشياء إضافية مثلاً كصنف مصنع (factory) وصنف بذر (seeder) للتعامل مع بيانات إختبارية أثناء التطوير (أي لبذر جدول البيانات ببيانات وهمية لإختبار العمليات) سأحاول شرح الموضوع بإختصار وعلى عمود واحد هو name، بإمكانك بعد ذلك تخصيص العمليات وإضافة الحقول التي تريدها بشكل كامل: 1 - إنشاء الملفات والأصناف، يمكنك هنا إستخدام أوامر artisan لهذا الأمر: php artisan make:model Student -mcsf الأمر السابق لإنشاء نموذج سميناه Student، و مررنا له الخيارات m وتعني migration و c تعني controller و s تعني seeder و f تعني factory. 2 - إنشاء مسار resource في ملف web.php: use App\Http\Controllers\StudentController; Route::resource('students', StudentController::class); السطر السابق سيمكننا من تعريف 7 مسارات كاملة ويُعطي لكل واحد منها إسم: /students -> name: students.index (GET) - controller method: index /students -> name: students.store (POST) - controller method: store /students/create -> name: students.create (GET) - controller method: create /students/{student} -> name: students.show (GET) - controller method: show /students/{student} -> name: students.update (PATCH) - controller method: update /students/{student} -> name: students.destroy (DELETE) - controller method: destroy /students/{student}/edit -> name: students.edit (GET) - controller method: edit 3 - ملء حقول جدول قاعدة البيانات (students) من خلال ملف التهجير الذي تم إنشاؤه: public function up(): void { Schema::create('students', function (Blueprint $table) { $table->id(); $table->string('name'); // add all fields later $table->timestamps(); }); } 4 - تنفيذ أمر التهجير: php artisan migrate سيقوم الأمر السابق بتهجير الملف السابق (إنشاء جدول students) وملئه بالحقول التي حددناها. 5 - تخصيص صنف المصنع وصنف البذر: من خلال صنف المصنع StudentFactory سنقوم بإضافة الحقل name وإسناد قيمة وهمية له عبر الدالة fake: public function definition(): array { return [ 'name' => fake()->name ]; } ومن خلال صنف البذر StudentSeeder سنستعمل النموذج والتابع factory لإنشاء 100 سجل مثلاً: use App\Models\Student; public function run(): void { Student::factory(100)->create(); } ثم من خلال الملف DatabaseSeeder سنضيف صنف البذر الخاص بالطلاب حتى يتم تنفيذه مع البذر: public function run(): void { $this->call([ StudentSeeder::class ]); } 6 - تنفيذ أمر البذر: php artisan db:seed الآن يُفترض أن تجد جدول الطلاب به 100 سجل. 7 - كتابة المنطق في وظائف المتحكم: <?php namespace App\Http\Controllers; use App\Models\Student; use Illuminate\Http\Request; class StudentController extends Controller { public function index() { $students = Student::latest()->paginate(10); return view('students.index', compact('students')); } public function create() { return view('students.create'); } public function store(Request $request) { $data = $request->validate([ 'name' => 'required|min:5|max:100', ]); Student::create($data); return redirect()->route('students.index') ->with('success', 'Student created successfully.'); } public function show(Student $student) { return view('students.show', compact('student')); } public function edit(Student $student) { return view('students.edit', compact('student')); } public function update(Request $request, Student $student) { $data = $request->validate([ 'name' => 'required|min:5|max:100', ]); $student->update($data); return redirect()->route('students.index') ->with('success', 'Student updated successfully.'); } public function destroy(Student $student) { $student->delete(); return redirect()->route('students.index') ->with('success', 'Student deleted successfully.'); } } 8 - ستحتاج إلى إضافة الحقل name إلى مصفوفة fillable في النموذج Student: protected $fillable = ['name']; 9 - إنشاء العروض (views) الأمر يعتمد على هيكلية ملفات العروض التي لديك وكيف تريد تنظيمها، لكن حسب الشيفرة التي كتبناها في المتحكم يُفترض أن يكون لدينا مجلد بالإسم students بداخل مجلد views وبداخله ملفات العروض (index - create - show - edit)، سأضيف ملف مخطط بالإسم main بداخل مجلد layouts لإستعماله كهيكل لبقية الملفات: views: - layouts: - main.blade.php - students: - create.blade.php - edit.blade.php - index.blade.php - show.blade.php في ملفات العروض ستقوم فقط بعرض البيانات المُرسلة من المتحكم، و ستوجه الروابط والإستمارات إلى المسارات التي أنشأناها، حتى لا يطول الجواب ستجد مُحتوى ملفات العروض والشرح ككل في مستودع github التالي: laravel11-crud يُمكنك بعدها تخصيص الحقول والقالب بالشكل الذي تريد.
-
كما تعلم فإن الحلقة التكرارية for تتكون من 3 أجزاء رئيسية، أول جزء يُسمى التمهيد و هو يُنفذ مرة واحدة فقط يتم من خلاله تمهيد متغيرات أو غيره، الجزء الثاني هو شرط إنتهاء الحلقة ويتم إختبار الشرط قبل تنفيذ ما بداخل الحلقة و يتم هذا الأمر بإستمرار مع كل تكرار، آخر جزء يتم تنفيذه بعد إنتهاء تنفيذ جسم الحلقة لكل تكرار ونقوم فيه بالغالب بزيادة العداد أو التغيير في قيمة المتغيرات التي تمت تهيأتها في أول جزء. يُمكننا التخلي عن أي جزء من هذه الأجزاء و كتابته قبل أو بداخل الحلقة، لكن يجب المحافظة على هيكلية الحلقة نفسها، يعني لو تخليت عن جزء تعريف الشرط في كتابة الحلقة نفسها ونقلته إلى الجسم كما هو الحال لديك يجب المحافظة على الفواصل المنقوطة كما هي بالشكل التالي: for (let current = 22; ; current+= 1) { if (current % 7 === 0) { console.log(current) break; } } أقصد هذا الجزء: for (let current = 22; ; current+= 1) ^^^ ما قبل الفاصلة المنقوطة الأولى يُمثل الجزء الأول من الحلقة وما بعدها إلى غاية الفاصلة المنقوطة الثانية يُمثل الجزء الثاني ثم يأتي الجزء الثالث والأخير. يُمكنك التخلي عن كل ذلك لكن يجب ترك الفواصل و هذا نفس المثال السابق: let current = 22 for (;;) { if (current % 7 === 0) { console.log(current) break; } current+= 1; } تم نقل جزء التمهيد إلى قبل الحلقة، التعليمة break ستُوقف الحلقة إذا تحقق الشرط، جزء زيادة العداد تم نقله إلى داخل الحلقة ليتم تنفيذه في آخر كل تكرار
- 3 اجابة
-
- 1
-
-
قد يتأخر الرد أحياناً من مركز المساعدة وذلك قد يكون بسبب الضغط أو مراجعة للمشاريع أو غير ذلك، وهذا شيء طبيعي يُرجى الإنتظار بعض الوقت وعدم القلق من هذا الأمر. سيتم الرد عليك في أقرب وقت ممكن، شكراً لتفهمك.
- 3 اجابة
-
- 1
-
-
يمكنك الإطلاع على الصفحة التالية الامتحان والحصول على الشهادة بها كل شيء يتعلق بموضوع الشهادة و الإمتحان و الخطوات مقتبسة من الصفحة: خطوات الامتحان 1. تواصل معنا أخبرنا برغبتك باجراء الامتحان مع تزويدنا بروابط مشاريعك التي طبقتها أثناء الدورة. يجب أن تكون قد طبقت المشاريع مع المدرب أثناء الدورة، ولا يمكن اجراء امتحان بمشاهدة المحتوى فقط. 2. محادثة صوتية سنحدد لك موعد لاجراء محادثة صوتية لمدة 30 دقيقة يطرح المدرب فيها أسئلة متعلقة بالدورة ويناقش معك ما نفذته خلالها. 3. مشروع التخرج سيحدد لك المدرب مشروعًا مرتبطًا بما تعلمته أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع الى أسبوعين. 4. مراجعة المشروع والتخرج سيراجع المدرب المشروع الذي أنجزته، وإن سارت جميع الخطوات السابقة بشكل صحيح، ستتخرج وتحصل على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل من جديد. الشروط التي يجب تحقيقها قبل التقدم للإمتحان: يمكنك التقدم إلى امتحان الدورة، من خلال التواصل مع مركز مساعدة أكاديمية حسوب، مع مراعاة الشروط التالية: إتمام أربعة مسارات تعليمية على الأقل التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولًا بأول لمشاركتها معنا بالتوفيق.
-
أطر العمل الشهيرة في PHP والتي من بينها لارافيل تعتمد على ما يُسمى بحاوية الخدمات (Service Container) وهي عبارة عن حاوية يتم ملؤها بكافة الإعتماديات والتبعيات التي يحتاجها إطار العمل للإقلاع وتتم هذه العملية أثناء التمهيد (Bootstrapping)، تعتمد لارافيل كثيراً على مزودي الخدمات (Service Providers) لتحميل الأصناف و الكائنات وغيرها من إعتماديات، وأثناء التنفيذ إذا ما احتاج صنف معين إلى شيء ما يتم جلبه من تلك الحاوية إن كان موجود وإذا لم يكن كذلك يتم إنشاؤه و الإحتفاظ به في الحاوية لجلبه عند الطلب مرة أخرى. في الرابط التالي: DefaultProviders ستجد كل مزودي الخدمات الإفتراضية التي يستعملها إطار العمل، كل مزود خدمة به تابع register يقوم بتسجيل الخدمة التي يقدمها في حاوية الخدمات، أثناء عملية التمهيد يتم المرور عليها كلها وتنفيذ التابع register لتسجيل تلك الإعتماديات. بعد تسجيل مزود الخدمة يتم أيضًا إستدعاء التابع boot يُمكنك الإطلاع على المقال التالي للمزيد من المعلومات: مُعظم الحزم الشهيرة بها مزود خدمة يتم تسجيله بعد تثبيت الحزمة و هنا مثال عن FortifyServiceProvider ، بإمكانك إنشاء مزودو خدمة خاصين بتطبيقك الذي تبنيه، كل ما عليك هو تسجيلهم في الملف providers.php الموجود في مجلد bootstrap أو إستخدام AppServiceProvider الموجود بشكل إفتراضي المفهوم نفسه لم يتغير سواء في لارافيل 11 أو الإصدارات التي قبله، ما تغير هو فقط مكان تسجيل مزودي الخدمات الخاصة بالحزم أو تلك التي تُنشؤها بنفسك، سابقاً كان في ملف app.php بمجلد config و الآن أصبح يتم من خلال الملف providers.php الموجود في مجلد bootstrap. بالنسبة للحزم التي تقوم بتثبيتها يُفترض أن عملية التسجيل ستتم بشكل تلقائي أما إذا أنشأت مزود خدمة بنفسك فستسجله بنفسك وذلك فقط بإضافته إلى المصفوفة في الملف. ستجد في المساهمة التالية مثال عن الإستخدام لإنشاء نظام صلاحيات و أدوار:
- 4 اجابة
-
- 2
-
-
-
الطبقات الوسيطة التي ذكرتها (auth و geust) لا يتم إنشاؤها مع الحزمة Breeze فهي لا علاقة لها بالحزمة بشكل خاص وإنما تأتي مع إطار العمل نفسه و Breeze يستعملها عند تعريف المسارات الخاصة بعملية المصادقة والتسجيل وغيرها، كما هو الحال طبعاً مع Jetstream و Fortify ... الطبقة الوسيطة guest عملها هو عدم السماح للمستخدم المصادق عليه بالوصول إلى مسارات الزوار أو بشكل أدق المسارات المطبق عليها هذه الطبقة وأذكر هنا مسار تسجيل الدخول و مسار تسجيل مستخدم جديد على سبيل المثال. (يعني لو مستخدم x سجل دخوله في التطبيق وحاول تعديل الرابط لزيارة صفحة تسجيل الدخول لن يتمكن من الوصول لها بل سيتم إعادة توجيهه إلى صفحة dashboard نفس الأمر بالنسبة لبقية المسارات المطبق عليها هذه الطبقة). الطبقة الوسيطة auth تعمل عكس guest فهي تحمي مسارات المستخدم من الوصول من طرف الزوار، يعني لو زائر قام بتوجيه الطلب مباشرة إلى مسار dashboard على سبيل المثال من دون تسجيل الدخول هذه الطبقة ستُعيد توجيهه إلى مسار تسجيل الدخول ولن تسمح له بهذا الشيء. في غالب الأحيان لا نحتاج التعديل على هذا السلوك و إنما إذا احتجنا إلى التعديل سيكون في الأغلب المسار الذي نريد توجيه المستخدم أو الزائر له، يعني لو الحالة هي أننا نريد توجيه المستخدم المصادق عليه إذا أراد الوصول إلى مسارات guest إلى مسار غير dashboard فيمكن ذلك ببساطة عبر التابع boot في الصنف AppServiceProvider بالشكل التالي: use Illuminate\Auth\Middleware\RedirectIfAuthenticated; // in boot method RedirectIfAuthenticated::redirectUsing(fn($request) => route('my-space')); و تُحدد المسار الذي تريد، وإن كان لديك منطق معقد لتحديد مسار التوجيه يُمكنك من خلال تغيير الدالة السهمية إلى دالة مجهولة عادية وتنفيذ المنطق ثم إرجاع المسار use Illuminate\Auth\Middleware\RedirectIfAuthenticated; // in boot method RedirectIfAuthenticated::redirectUsing(function($request) { // do what you want return route('my-space'); }); بهذا الشكل إذا أراد مستخدم مصادق عليه الوصول إلى login مثلاً سيتم توجيهه إلى مسار my-space وليس الإفتراضي (dashboard)، بطبيعة الحال يجب تعريف هذا المسار وإلا سيعطيك خطأ أن المسار غير معرف. وهكذا نفس الأمر بخصوص الطبقة auth. أيضاً يُمكن تحقيق ما تم ذكره أعلاه من خلال التعديل في الملف app.php الموجود في مجلد bootstrap من خلال التابع withMiddleware عبر إستعمال التوابع redirectTo و redirectUsersTo و redirectGuestsTo على حسب الحالة، في الأسفل بعض الأمثلة: ->withMiddleware(function (Middleware $middleware) { // $middleware->redirectTo('/', '/my-space'); // $middleware->redirectUsersTo('/my-space'); // $middleware->redirectGuestsTo('/'); // $middleware->redirectUsersTo(fn ($request) => route('my-space')); }) أما إن كان لابد من تعديل الصنف الإفتراضي وتخصيصه بالشكل الذي ترغب فعليك إنشاء صنف Middleware مثلاً: pa make:middleware RedirectIfAuthenticated ثم عمل override للصنف الإفتراضي وذلك من خلال تسجيلها بنفس الإسم: ->withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, ]); }) بعد ذلك تستطيع التعديل على الصنف الذي أنشأته بالشكل الذي تريد، كما يُمكنك عمل extends للصنف الإفتراضي وتخصيص الجزء الذي تريد فقط: <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class RedirectIfAuthenticated extends \Illuminate\Auth\Middleware\RedirectIfAuthenticated { protected function redirectTo(Request $request): ?string { return route('my-space'); } }
- 2 اجابة
-
- 2
-
-
لاحظ أنه لديك في ملف web.php : Auth::routes(); Auth::routes(); Auth::routes(['register' => false]); تحتاج حذف السطرين: Auth::routes(); Auth::routes(); و الإبقاء على آخر سطر فقط. كما أن المسار: Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); مكرر مرتين، تحتاج فقط إلى تسجيل المسار مرة واحدة.
-
موضوع التعلم وطريقة التعلم المناسبة لك بالإضافة لمتابعة الدروس و كم الوقت الذي تحتاجه في اليوم للتعلم يعتمد عليك وحدك و على الطريقة التي ترتاح لها فكل شخص و طبيعته البعض يحب تدوين المعلومات المهمة التي يشرحها المدرب أو المحاضر في الدروس بدفتر و يُنظمها بشكل يُسهل عليه فيما بعد مراجعة تلك المعلومات بسرعة يُمكنك إتباعها إن كنت ترتاح لها. ستجد في المساهمة التالية بعض النصائح ستساعدك في هذا الأمر: لكن أهم شيء هو فهم الدروس أولاً والتطبيق عليها ثانياً، سواء مع المدرب أو وحدك كتطبيق تمارين لزيادة وترسيخ الفهم في المسارات النظرية، أما المسارات التطبيقية فهي مسارات لبناء منتج متكامل والتطبيق عليها يتم بإستمرار مع المدرب ويجب الإحتفاظ بالملفات لتقديمها عند طلب الإمتحان: شروط التقدم للامتحان، أيضا أكاديمية حسوب توفر مجموعة من المدربين للإجابة على إستفسارات الطلاب ومساعدتهم فحاول قدر المستطاع الإستفادة من هذا الأمر، من خلال قسم الأسئلة و الأجوبة العام بطرح أسئلة لا تتعلق بمحتوى الدورة، أو من خلال صندوق التعليقات أسفل الدروس بطرح أسئلة تتعلق بالدروس لطلب شرح جزئية معينة أو مساعدة في تجاوز مشكلة ما.
- 3 اجابة
-
- 1
-
-
بإمكانك إستخدام برنامج Virt Manager فهو برنامج مفتوح المصدر و متاح للتحميل على مستودعات معظم التوزيعات فقط إستخدم مدير الحزم الخاص بالتوزيعة التي تستعملها لتثبيته. (رابط مستودع: virt-manager github repo )، البرنامج يُعتبر أفضل من ناحية الأداء. تأكد أن معالج جهازك يدعم خاصية Virtualization عبر تنفيذ الأمر: lscpu | grep Virtualization للتثبيت على توزيعة فيدورا مثلاً: sudo dnf install virt-manager qemu-kvm libvirt virt-viewer virt-install python3-libguestfs virt-top bridge-utils guestfs-tools libguestfs-tools libvirt-devel بعد تثبيت الحزم تأكد من إضافة المستخدم الخاص بك إلى المجموعات kvm و libvirt عبر تنفيذ الأمر: sudo usermod -aG kvm,libvirt $USER أخيرا قم بإعادة تشغيل الجهاز و سيصبح البرنامج جاهز للإستعمال.
-
نتأسف على التأخر في الرد، لكن يبدو من خلال الصور التي أرفقتها أنه لا يوجد أخطاء في الكود، يبدو فقط أنك تكتب في ملف database آخر إسمه power بدون لاحقة و تفتح ملف power.db حاول فقط تعديل السطر 3 إلى: let db = new sqlite3.Database('power.db', function(err) { ثم أغلق برنامج DB Browser، ثم أعد تنفيذ الملف: node powerjs.js بعد ذلك أعد تشغيل برنامج DB Browser ثم فتح ملف قاعدة البيانات power.db يُفترض أن تجد الجداول التي أنشأتها.
- 3 اجابة
-
- 1
-