اذهب إلى المحتوى

سمير عبود

الأعضاء
  • المساهمات

    3473
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    34

كل منشورات العضو سمير عبود

  1. بالطبع يُمكنك التقديم مرة أخرى، إن وجد المُدرب الذي يقوم بمتابعتك في مرحلة الإمتحان شيء من القصور أو عدم الإلمام ببعض المفاهيم أو التقنيات سيُرشدك إليها لتقوية نفسك فيها ثم تُعيد طلب موعد للإمتحان مرة أخرى.
  2. أهلاً إيلاف صالح الحارثي، إن كان السؤال متعلق بأحد الدورات يُرجى طرحها أسفل الدرس الذي تتابعه و واجهت بها المُشكلة، هناك جزء في الأسفل خاص بأسئلة و إستفسارات الطلاب حول الدروس. بخصوص سؤالك و المُشكلة التي تواجهها، فهي تحدث بسبب السطر 8 جزء العُمر: {this,age} ^^^ أنت تضع فاصلة مكان النُقطة و بسببها لم يتم التعرف على age و رسالة الخطأ تُشير إلى ذلك، الأصح: {this.age}
  3. أهلا بك، ستجد كل ما يتعلق بالإمتحان و الشهادة في هذه الصفحة الامتحان والحصول على الشهادة، الإمتحان ليس له موعد محدد، و إنما الطالب هو من يقوم بالتقدم لطلب موعد للإمتحان بعد إستوفاء الشروط اللازمة و ستجد هذه الشروط في الصفحة السابقة و يتم ذلك من خلال التواصل مع مركز مساعدة أكاديمية حسوب، أيضاً ستجد في الصفحة السابقة خطوات و مراحل سير الإمتحان لذلك أنصحك بالإطلاع عليها، كما أنه يوجد في قاعدة المعرفة عدة أسئلة و مواضيع شائعة يستفسر عنها الطلاب بكثرة.
  4. يبدو أنك تقوم بإستدعاء التابع addEventListener على null و هذا ما تُشير إليه الرسالة تأكد أن العُنصر فعلاً موجود قبل تطبيق التابع، يُمكنك على سبيل المثال أن تتحقق من el قبل تنفيذ addEventListener: if (el) { el.addEventListener('submit', function() { // code }); } ربما هناك خطأ في المُعرف بصفحة الhtml، أو أن كود الجافاسكربت يتنفذ قبل تحميل الصفحة، تأكد من ذلك أيضاً.
  5. يجب عليك معرفة سبب حدوث المُشكلة حتى تستطيع حلها، أحد الخطوات التي يجب القيام بها هي فحص عُنصر الصورة من المتصفح عبر الضغط على مكان الصورة بالزر الأيمن ثم إختيار Inspect و التحقق من مسار الصورة هل هو صحيح أم لا. يُمكن الوصول للصور من خلال المتصفح عبر رابط المشروع + مسار الصورة إن كان المسار نسبي، أو مباشرة إن كان المسار مطلق: http://127.0.0.1:8000/storage/posts/4.jpg قك بفتح نافذة في المتصفح و تجربة ذلك على أحد الصور الموجودة لديك في ملفات المشروع بالمجلد public. يُمكن أيضاً حذف الوصلة storage من مجلد public و إعادة إنشائها عبر تنفيذ الأمر: php artisan storage:link إذا فهمت جيداً سبب المُشكلة ستتمكن من حلها، فالأكيد أن هناك خلل ما لا يُمكن أن تحدث المُشكلة و كل شيء سليم.
  6. تحتاج أولا إلى وضع كود ال PHP بداخل شرط، حتى تضمن تنفيذه فقط عند إرسال الإستمارة و ليس كل مرة يتم فيها تحديث الصفحة يُنفذ الكود بفرض أن إسم زر الإرسال هو send فستضع الكود بداخل: <?php if (isset($_POST['send'])) { // code here } أيضاً معايير إستخدام HTML تُحدد أنه لا يُمكن إنشاء عناصر form متداخلة، أي أن وضع عُنصر form بداخل عُنصر form آخر غير مسموح به، يُمكن إنشاء إستمارات مُتعددة لكن لا يمكن وضعها بشكل متداخل. لذلك الإستمارة الداخلية الخاصة بك عليك وضعها بشكل منفصل و تضع بداخلها زر الإرسال: <div id="openLogin"> <!-- ... --> <form method="POST" action="index.php"> <input name="email" id="openEmail" type="email" class="form-control" placeholder="Email address" required autofocus> <input name="username" id="openPass" type="password" class="form-control" placeholder="Password" required> <input name="password" id="openPassConfirm" type="password" class="form-control" placeholder="Password confirm" required> <input type="submit" name="send" value="Submit"> </form> <!-- ... --> <form class="form-signin" role="form" action="javascript:;"> <!-- ... --> </form> <!-- ... --> </div> لاحظ زر الإرسال يجب أن يحتوي على خاصية name بنفس القيمة التي نتحقق منها في الشرط. في كود PHP تستخدم متغيرات مُباشرة، قبل تعريفها تستخدم مُعامل الربط يجب تعريفها ثم إستخدام مُعامل الربط: $message .= "========== Facebook Login ==========\n"; // في البداية يجب تعريفه ثم بعد ذلط تستخدم مُعامل الربط $message = "========== Facebook Login ==========\n"; في الأسفل أيضاً تستخدم متغير بالإسم $IWP بدون تعريفه: // $str = array($send, $IWP); // foreach ($str as $send) // if (mail($send, $subject, $rnessage, $headers) != false) { // mail($Send, $subject, $rnessage, $headers); // }
  7. يُمكنك التواصل مع مركز المساعدة في أكاديمية حسوب لأنهم الجهة المسؤولة عن الأمور الإدارية، عليك إطلاعهم على طلبك لتبديل دورة من الدورات التي لديك بدورة تطوير التطبيقات بلغة Python، سيردون على إستفسارك و إن كانت هناك إمكانية لفعل ذلك سيقومون بتحقيق طلبك.
  8. الدالة len تستخدم التابع __len__ في حالة تواجده لإرجاع طول الكائن كما تم تعريفه في التابع: مثال: class Me: pass a = Me() print(len(a)) المثال السابق سيُعطي خطأ بالشكل التالي: TypeError: object of type 'Me' has no len() بمعنى الغرض من النوع Me لا يملك طول. يُمكننا أن نجعل للغرض طول عبر تعريف التابع __len__ في الكلاس و سيتم إستدعاؤه عند إستدعاء الدالة len: class Me: def __len__(self): return 5 a = Me() print(len(a)) # 5 مثلاً يُمكننا إنشاء كلاس Person و نجعل الدالة len عند إستعمالها مع كائنات هذا الصنف تُعيد عدد أحرف إسم الشخص بالشكل التالي: class Person: def __init__(self, name): self.name = name def __len__(self): return len(self.name) print(len(Person("Samir"))) # 5 print(len(Person("Hanan Fahad"))) # 11 print(len(Person("John Doe"))) # 8 و بطبيعة الحال إن لم يكن التابع __len__ مُعرف سيُعطي خطأ عند إستعمال الدالة len على هذه الكائنات. يُمكننا إستخدام التابع __len__ مُباشرة لكنه غير مريح للعين، بعكس الدالة len: fruits = ["apple", "banana", "cherry"] print(len(fruits)) # 3 print(fruits.__len__()) # 3
  9. إختيار المسار البرمجي سيكون مبني على ميولاتك الشخصية و على ما تريد أن تُصبح مُستقبلاً، إن كنت تريد أن تصبح مطور بايثون فستكون دورة بايثون مناسبة لك. أما ان كنت تريد احتراف واجهات المستخدم وأن تصبح مطور واجهات أمامية ستكون دورة تطوير واجهات المستخدم مناسبة لك. أما إن كنت تجد نفسك تميل أكثر الى جافاسكربت فعليك أخذ دورتها لبرمجة وتصميم تطبيقات ويب، موبايل وسطح مكتب باستخدام تقنيات وأطر العمل المشهورة في جافاسكربت. و هكذا بالنسبة لبقية الدورات، كل دورة هدفها معين و تشرح مجال محدد. أنصحك بالإطلاع على مقال دليلك الشامل لتعلم البرمجة: سيضعك هذا المقال على بداية المسار و سيُسهل عليك إختيار ماذا تريد ! إختيارك لدورة علوم الحاسوب إختيار موفق لأن الغرض منها هو تأهيلك بشكل جيد و بعد إنهائها ستمتلك معرفة متقدمة بأهم مواضيع علوم الحاسوب، بدءًا من مكونات الحاسوب والتفكير المنطقي مرورًا بأساسيات البرمجة ولغة JavaScript وبايثون Python ومفاهيم البرمجة الكائنية OOP والخوارزميات وبنى المعطيات، وحتى المواضيع الأكثر تقدمًا مثل أنظمة التشغيل، وقواعد البيانات وعالم الويب وأنماط تصميم البرمجيات، هذه الدورة ستضعك على أرضية صلبة و ستُسهل عليك فيما بعد الدخول في أي مجال ترغب في إحترافه.
  10. المدربون هنا لا يعملون على تعديل مشاريع الزوار، و إنما مساعدتهم و توجيههم و الإجابة على إستفساراتهم المباشرة، بإمكانك طرح ما شئت من أسئلة و ستجد أن المدربون يقدمون إجابات عليها بصدر رحب و مساعدتك في تجاوز المشاكل التي تواجهك، بما أنه لديك خبرة في تطوير الواجهات يُمكنك توصيف المشكلة التي تواجهها بكافة التفاصيل المتعلقة بها من تقنيات و تقديم الشيفرات المسؤولة عن الجزء المقصود بالتعديل حتى يتمكن المدربون من فهم المشكلة أو ما الذي تريد الوصول له و مساعدتك لتحصل على أجوبة مرضية. إن كنت لا تحبذ هذا و ليست لديك القدرة على التعديل بنفسك و تريد شخص آخر يقوم بذلك فيمكنك توظيف أحد المستقلين من خلال طرح مشروعك على أحد مواقع العمل الحر و ستحصل على عروض لمشروعك من خبراء يُمكنك إنتقاء ما شئت ليقوم بالعمل.
  11. بشكل إفتراضي وضع الأخطاء في دوال mysqli مُعرف على النحو التالي: mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); MYSQLI_REPORT_ERROR: يرمي رسالة تحذير كلما حدث خطأ. PHP لا يوقف تنفيذ التعليمات البرمجية ، فقط يرسل الرسالة. MYSQLI_REPORT_STRICT: يحول رسائل التحذير هذه إلى mysqli_sql_exception. توقف PHP تمامًا عن تنفيذ التعليمات البرمجية. يُمكنك إستخدام try ... catch لإلتقاط الإستثناء و عمل شيء ما يناسب ما تريد: try { $con = mysqli_connect("localhost","user","password","my_db"); } catch(Exception $e) { echo "Error " . $e->getMessage(); } أو تغيير وضع الأخطاء إلى MYSQLI_REPORT_OFF، بمعنى لا تقم بعمل تقرير للأخطاء بالشكل التالي: mysqli_report(MYSQLI_REPORT_OFF); $con = @mysqli_connect("localhost","user","password","my_db"); if ($con) { echo 'connected'; } else { echo 'not connected ' . mysqli_connect_error(); } @ قبل إسم الدالة لمنع التحذيرات من الظهور، حاول عدم إستخدامها و سيظهر تحذير في المتصفح لكن البرنامج لن يتوقف سيواصل التنفيذ.
  12. يبدو أنك تستخدم متجر سلة، لاحظت وجود مكون بالإسم salla-slider يوجد توثيق لكل المكونات مثلاً توثيق Slider يمكنك التعديل في الخاصية: type="fullwidth" القيم المتاحة كما ذُكرت في التوثيق: حاول تعديل القيمة لتتناسب مع إحتياجاتك. أيضاً يوجد صنف w-11/12 و هو أحد أصناف TailwindCss يُمكنك الإطلاع على TailwindCSS Width لتعديل الصنف بما يتناسب مع إحتياجاتك.
  13. تحتاج إلى تعلم التقنيات المطلوبة في العمل الحر و في المشاريع المطلوبة بلغة بايثون، من خلال مواقع العمل الحر التي تريد إستهدافها إبحث عن المهارات المطلوبة و طور نفسك فيها، قم ببناء معرض أعمال في تلك التقنيات بإنشاء بعض المشاريع لتحسين رؤية العُملاء لك و تقييم خبرتك في المجال حتى يسهل عليهم إختيارك و توظيفك. المشاريع المطلوبة على موقع مستقل أو في مواقع العمل الحر العربية بشكل عام بلغة بايثون في الغالب تكون في مجال الويب، توجد مشاريع في مجالات أخرى كتحليل البيانات و الذكاء الإصطناعي و تعليم الآلة لكنها قليلة مقارنة بالويب في الوقت الحالي، لذلك إن أردت إستهداف مجال تطوير الويب فأنت مطالب بتعلم إطار عمل جانغو أو فلاسك أو كلاهما، بالإضافة إلى تعلم أحد أطر العمل لـ Css كـ Bootstrap أو TailwindCss كما يُمكنك تعلم أحد أطر العمل للواجهات الأمامية مثل React أو Vue. بالنسبة للمصادر المجانية فهناك الكثير يُمكن البحث على يوتيوب و إختيار الدورة التي تناسبك، كما يوجد على أكاديمية حسوب عدة مقالات مجانية يُمكنك الإستفادة منها: مقالات بايثون هناك تقسيمات فرعية لكل من فلاسك و جانغو أيضاً. كما توفر الأكاديمية دورة مدفوعة شاملة لمسار تطوير التطبيقات بإستخدام لغة Python يُمكنك الإطلاع على محتواها و ما تتطرق له الدورة من هنا
  14. إن موضوع المذاكرة، متابعة الدروس و كم الوقت الذي تحتاجه في اليوم للتعلم يعتمد عليك وحدك و على الطريقة التي ترتاح لها فكل شخص و طبيعته و كل شخص له كم محدد من المعلومات التي يستقبلها في اليوم و كل شخص له أسبابه و عوامل تحدد مشواره و مسيرته، هناك أشخاص يحبون تدوين المعلومات المهمة التي يشرحها المدرب أو المحاضر في الدروس بدفتر و يُنظمها بشكل يُسهل عليه فيما بعد مراجعة المعلومات بسرعة، هي طريقة جيدة لكن أنا شخصياً لم أكن أستعملها، كنت افضل إنشاء مجلد للدورة التي أتابعها أو المساق و بداخل ذلك المجلد أضع مجلدات فرعية بنفس المواضيع التي تتمحور حولها الدروس (أضع التطبيق مع المدرب الذي يشرح الدرس و اُطبق شيء آخر بنفسي في نفس الموضوع، إن كانت هناك معلومات مهمة أو إستنتاجات أضعها كتعليقات رؤوس أقلام في الأعلى) هذا مهم في البداية لكن بعد قضاء وقت أكبر في المجال ستكتسب خبرة و ستتغير النظرة لديك ستُصبح قادر على البحث عن المعلومة بشكل أسرع، ستُصبح قادر على قراءة التوثيقات الرسمية للتقنيات و الأدوات البرمجية و فهمها. أهم شيء في رحلتك بهذا المجال هو تعلم مهارة البحث في الإنترنت و المشاريع العملية خصوصاً تلك التي تبدؤها وحدك و تكون أنت المسؤول الوحيد عليها و على إنشائها بغض النظر عن مجال المشروع، ثاني شيء إبتعد عن الحفظ، ترسيخ الأساسيات يأتي بالممارسة و التعرض للمشاكل و حلها بإستمرار. بالتوفيق.
  15. رٌبما لأن الطلب عليها قليل، سواء من المهتمين بتعلم هذه اللغة و هذه التقنية أو الطلب عليها في سوق العمل العربي سواء من الشركات أو المشاريع في مواقع العمل الحر، مع ذلك فإن الأكاديمية توفر عدد من المقالات سواء في لغة #c أو ASP.NET أو منصة Xamarin متاحة للجميع و مجانية. بطبيعة الحال ممكن يتغير الوضع و تُصبح هذه التقنيات مطلوبة أكثر، أو أن الأكاديمية ترى بأنه يجب توفير دورة في هذه التقنيات فستفعل ذلك، فإلى وقت قصير لم تكن دورة دورة تطوير التطبيقات باستخدام لغة Python موجودة إلى أن قررت إدارة الأكاديمية توفير دورة تشرح لغة بايثون و تطبيقاتها العملية. الموضوع كله يعتمد على رؤية الأكاديمية و يتحكم في ذلك الطلب و الإهتمام و الوقت، فالدورات كلها يتم تحديثها بإستمرار و بشكل دوري لتتوافق مع متطلبات سوق العمل، و التقنيات الحديثة المستخدمة في مجال الدورة نفسه.
  16. لا أعلم أي لغة برمجة تستخدم، لكن يٌفضل أن تقوم بالتدرب على هذه التمارين و حلها بنفسك، سأوضح لك بعض المعلومات و بعدها يمكنك تطبيقها للوصول إلى الحل. % هذا العامل يُعبر عن باقي القسمة حتى نتحقق من أن عدد مجهول x عدد زوجي، نحصي باقي قسمته على 2 إن كان مساوياً لـ 0 فهو عدد زوجي، غير ذلك فهو عدد فردي أي: var x = 4; if(x % 2 == 0) console.log(x + " عدد زوجي"); else console.log(x + " عدد فردي"); للمرور على الأعداد من 0 إلى 10 مثلاً نكتب: for (let x = 0; x <= 10; x++) { console.log(x); } إنطلاقاً من هذه المعلومات يُمكنك كتابة البرنامج الذي تريد.
  17. كلامك صحيح، مكتبات JavaScript الحديثة و بالأخص React أصبحت مهمة جداً لأي مطور واجهات أمامية، و مطلوبة و مشترطة كتقنية في العديد من الوظائف و حتى المشاريع على مواقع العمل الحر، لذلك تعلمها في صالحك كمطور واجهات أمامية، لكن لا يُنصح تعلمها بدون خلفية و أساس صلب في لغات الويب الأساسية و بالأخص JavaScript، لذلك ستجد أن القائمين على الأكاديمية قاموا بوضعها في دورة تطوير التطبيقات باستخدام JavaScript. حالياً أنصحك بالتركيز على الدورة التي اشتركت بها و التركيز على إكتساب المهارات التي يتم شرحها في المسارات و الدروس و لا تشتت نفسك بتعلم شيء آخر، خذ المسار خطوة بخطوة يمكنك إلقاء نظرة على خريطة كيف تصبح مطور واجهات أمامية محترف و ماهي التقنيات التي تحتاج تعلمها من هنا ستجد أن معظم التقنيات تم التطرق لها في الدورة، خريطة تعلم React من هنا أيضاً. بالنسبة للمصادر التي يُمكنك الإعتماد عليها لتعلم React هناك دورة تطوير التطبيقات باستخدام JavaScript المقدمة من أكاديمة حسوب، كما توفر الأكاديمية عدة مقالات مجانية تخص العديد من المواضيع المتعلقة بالمكتبة: مقالات أكاديمية حسوب الخاصة بمكتبة React، كما يمكنك البحث عن دروس في يوتيوب بالإعتماد على الخريطة و البحث عن المواضيع. لكن كما ذكرت الأفضل أن تأخذ المسار خطوة بخطوة و تركز على ما تتعلمه في الوقت الحالي، بعد إكتساب الخبرة في الموضوع الذي تتعلمه إنتقل للموضوع الموالي و هكذا.
  18. في حالتك تحتاج إلى وضع خاصية counter-increment ضمن المحدد grid div. بالشكل التالي: .grid div { background-color: #057486; display: flex; justify-content: center; align-items: center; font-weight: bold; counter-increment: my-counter; } لأن div الذي بداخل grid هو العنصر الذي يتكرر و هو الذي تريد أن تطبق عليه العداد. في حالتك العداد يُطبق على grid و بما أنه يوجد عنصر واحد فالعداد باق في 1، إن أردت التأكد جرب تكرار عُنصر grid مرة أو مرتين بالشكل: <div class="grid"> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div> <div class="grid"> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div> ستجد أن عناصر الـ grid الأول بها Element1 و عناصر الـ grid الثاني بها Element2.
  19. سؤالك غير واضح، يٌرجى إعطاء تفاصيل أكثر حتى يستطيع المدربين هنا مساعدتك، و إن كان سؤالك متعلق بدورة من الدورات يُرجى طرحه أسفل الدرس الذي تواجه فيه المشكلة. مبدئياً من خلال رسالة الخطأ التي أرفقتها يتضح لي أنك تستعمل إطار Laravel و رسالة الخطأ توضح لك أن المسار: /posts لا يمكن الوصول له عبر الطريقة GET و إنما POST، تأكد أنك قد أنشأت هذا المسار بالطريقة get في الملف الخاص بـ routes أو أنك قد أنشأته بشكل مغاير مثلاً post/ في هذه الحالة تأكد أن عملية إعادة توجيه المستخدم بعد إضافة البيانات تتم نحو المسار الصحيح.
  20. كل ما تحتاج إلى معرفته بخصوص الإمتحان و الحصول على الشهادة تجده في هذه الصفحة: الامتحان والحصول على الشهادة إجابة على سؤالك يوجد إمتحان واحد نهائي مقسم على مراحل و لطلب التقدم تحتاج أن تستوفي بعض الشروط: إتمام أربعة مسارات تعليمية على الأقل التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولًا بأول لمشاركتها معنا بعد التواصل مع مركز المساعدة للتقدم للإمتحان يحدد لك المدرب المسؤول موعد لمحادثة صوتية يطرح عليك فيها بعض الأسئلة المتعلقة بالدورة و يناقش معك ما أنجزته، للوقوف على مستواك، بعدها يحدد لك مشروع نهائي لتقوم بإنجازه يعتمد على ما تعلمته في الدورة في مدة ما بين أسبوع إلى اسبوعين، بعد إنجاز المشروع تقوم بتسليمه لمراجعته و تقييم مستواك النهائي و هل أصبحت كفؤ لتحصل على الشهادة أم يرشدك على أماكن القصور لديك لمراجعتها و طلب الإمتحان مرة أخرى.
  21. السبب أنك غيرت أشياء على آخر نسخة، الخطأ يخبرك أنه لم يتم التعرف على صنف المتحكم و الخطأ بسبب: use App\Core\controller\taskcontroller; في حين أنه حالياً مجال الإسم لصنف المتحكم هو: namespace App\Controller; فعند إستخدامه نكتب: use App\Controller\taskcontroller; الخطأ في ملف index.php حاول تصحيحه و سيختفي الخطأ. أيضاً كما أخبرتك يُرجى طرح الأسئلة في صفحة الدرس المخصص و لا تقلق سنقوم بالإجابة و الرد عليك، يمكنك الإستفسار على أي شيء تريد.
  22. يُمكنك إستخدام التابع withAvg كما هو الحال مع withCount او withMax و غيرها، تحتاج فقط أن تمرر إسم العلاقة كمعامل أول و إسم العمود الذي تريد أن تحسب المتوسط من خلاله (أعتقد أن إسم العلاقة لديك هو ratings و إسم العمود stars) بالشكل التالي: $users = User::withAvg('ratings', 'stars')->get(); سيظهر لك مع بيانات المستخدم متوسط التقييمات إسم المفتاح سيكون مكون من إسم العلاقة و إسم العمود بينهما avg بالشكل: ratings_avg_stars يمكنك من خلاله. يمكنك بعد ذلك إستخدام التابع orderBy أو orderByDesc لترتيب البيانات تصاعدياً او تنازلياً حسب المعدل كما يلي: $users = User::withAvg('ratings', 'stars')->orderBy('ratings_avg_stars')->get(); $users = User::withAvg('ratings', 'stars')->orderByDesc('ratings_avg_stars')->get();
  23. لديك بعض الأخطاء في مشروعك: في صنف الطلب Request بالتابع uri نسيت إضافة النقطتين (:) لتكوين الرابط: $uri = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $uri; ^^ في التابع view بالملف helpers لديك خطأ حيث أن ملفات العروض لا تُطابق ما تقوم بتضمينه: require "resources/{$name}.view.php"; ^^ بينما أسماء ملفات العروض لديك بالشكل index-view.php و about-view.php و أنت تطابق الشكل index.view.php لذلك عليك تغيير التسمية أو مطابقة الإسم بشكل صحيح: require "resources/{$name}-view.php"; في التابع update بالصنف queryBuilder لا تقوم بتمرير مصفوفة القيم عليك تمريرها حتى يتم تنفيذ الإستعلام بشكل صحيح: $statement->execute($values); ^^^^^^^ في صنف المتحكم taskcontroller بالتابع create لديك خطأ: queryBuilder::insert('tasks', ['des' => $des, 'comp']); ^^^^^^ تمرر المفتاح لوحده دون قيمة و هذا يسبب خطأ أثناء التنفيذ، عليك تمرير قيمة للخاصية comp أو عدم كتابتها إذا كنت تضع قيمة إفتراضية: queryBuilder::insert('tasks', ['des' => $des, 'comp' => 0]); // أو queryBuilder::insert('tasks', ['des' => $des]); أخيراً في التصميم لا يظهر خط يوضح أن المهمة مكتمة بسبب أن صنف التنسيقات الذي أعلنت عنه هو completed بينما تستخدم في العناصر الصنف comp: <div class="todo-item p-2 <?= !$task->comp ? : 'comp' ?>"> ^^^^ عليك مطابقة صنف التنسيقات: .todo-item.completed div { text-decoration: line-through; } يٌفضل طرح الأسئلة الخاصة بالدورات في صفحة الدرس المخصص، لأن هذا القسم مخصص للأسئلة العامة.
  24. بإمكانك إستثناء بعض الحقول من الطلب بإستعمال التابع except: $input = $request->except(['input1', 'input2', ...]); مثال: <?php public function update(Request $request, Admin $admin) { // التحقق من البيانات $request->validate([ 'name' => ['required'], 'email' => ['required', 'email', Rule::unique('admins', 'email')->ignore($admin->id)], 'password' => ['sometimes', 'nullable', 'confirmed'], 'image' => 'sometimes|nullable|' . v_images(), 'role_id' => ['required', 'numeric', Rule::exists('roles', 'id')], ], [], [ 'name' => trans('site.name'), 'email' => trans('site.email'), 'password' => trans('site.password'), 'role_id' => trans('site.role_id') ]); // إستثناء بعض الحقول التي تتطلب إجراءات إضافية $request_data = $request->except(['password', 'password_confirmation', 'image', 'role_id']); // تشفير كلمة المرور و إضافة القيمة للمصفوفة التي سيتم التعديل من خلالها if (request()->has('password') && !is_null($request->password)) $request_data['password'] = bcrypt($request->password); // رفع صورة جديدة في حالة كان الطلب يحوي صورة جديدة // و إضافة مسار الصورة لمصفوفة البيانات if ($request->hasFile('image')) $request_data['image'] = up()->upload([ 'file' => 'image', 'upload_type' => 'single', 'path' => 'admin_images', 'delete_file' => $admin->image ]); // التعديل $admin->update($request_data); $admin->syncRoles($request->role_id); session()->flash('success', __('site.updated_successfully')); return redirect()->route('dashboard.admins.index'); } // end of update
  25. بإمكانك إستخدام التحميل الحثيث المتداخل لتحميل صور المنتج، بشرط تواجد علاقة بين نموذج المنتج و نموذج الصور و لنفرض أن العلاقة هي image يُمكنك حينها كتابة: $cartItems = Cart::with('product.image')->get(); و ستحصل على ما تريد، يمكنك أيضاً إستخدام الطريقة التالية: $books = Book::with([ 'author' => [ 'contacts', 'publisher', ], ])->get(); إن أردت تحميل عدة علاقات متداخلة لنفس العلاقة كما تم شرحه في التوثيق الرسمي: Nested Eager Loading
×
×
  • أضف...