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

محمد عاطف17

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

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

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

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

    60

كل منشورات العضو محمد عاطف17

  1. لقد تم تنفيذ الملف بنجاح لديك . إذا أردت تنفيذه مرة أخرى ستقوم بتنفيذ الأمر من جديد. هل تقصد بإستدعاءه هو تنفيذه أم تقصد فتحه في برنامج IDLE أم ماذا. إذا كنت تقصد تنفيذه فهو كما فعلت قم بكتابة أمر python3 بعده إسم الملف . وتأكد من وجود الملف في نفس المسار الحالي . أما إذا كنت تقصد فتحه في برنامج IDLE . فيمكنك فتح برنامج IDLE ومن قائمة file قم بإختيار open ثم قم يالذهاب إلى مكان الملف وتحديده وستجد أنه تم فتحه ويمكنك الآن التعديل عليه وتنفيذه كما تريد. إذا كنت تقصد شئ أخر يرجى التوضيح لنستطيع مساعدتك.
  2. وعليكم السلام ورحمة الله وبركاته. نعم بالفعل هناك علاقة بين عدد ال epochs و حجم ال batch size في تدريب الشبكات العصبية وهذه العلاقة تؤثر على أداء النموذج وتدريبه. إن ال epoch هو عندما يتم المرور مرة واحدة على كامل مجموعة البيانات (dataset) خلال عملية التدريب أى إذا وضعناه مثلا ب 2 سيتم تمرير البيانات بالكامل مرتين أثناء عملية التدريب. و كلما زاد عدد ال epochs، زادت فرصة النموذج في تعلم الأنماط في البيانات و لكن قد يؤدي ذلك إلى الإفراط في التخصيص (overfitting) إذا كان عدد الـ epochs كبيرا جدا. أما ال Batch Size فهو عدد العينات التي يتم معالجتها في كل خطوة (step) قبل تحديث أوزان النموذج. و كلما كان حجم ال batch size أكبر كانت عملية التدريب أسرع لأنه يتم تحديث الأوزان بعد معالجة عدد أكبر من العينات و لكن قد يتطلب ذلك ذاكرة أكبر. أما إذا كان حجم الـ batch size صغيرا فإن النموذج سيتم تحديثه بشكل متكرر مما قد ينتج عنه تقلبات كبيرة في عملية التدريب. مثال : إذا كان لديك batch size = 32 و عدد الـ epochs = 10 فإن النموذج سيتدرب 10 مرات على البيانات كاملة مع تحديث الأوزان بعد كل 32 عينة. و إذا قمت بزيادة batch size إلى 64 فإن عدد التحديثات في كل epoch سينخفض إلى النصف وقد تحتاج إلى زيادة عدد الـ epochs للحفاظ على نفس الأداء. إذا زيادة حجم ال batch size ستقلل من عدد التحديثات في كل epoch وقد تتطلب منك زيادة عدد ال epochs.وتقليل حجم ال batch size سيزيد من عدد التحديثات في كل epoch وقد يتطلب منك تقليل عدد ال epochs.
  3. وعليكم السلام ورحمة الله وبركاته. Mean Absolute Error (MAE) : نستخدمه عندما نريد قياس الخطأ بشكل مباشر .وعندما يكون لديك بيانات تحتوي على قيم شاذة (Outliers) وتريد تقليل تأثيرها لأن MAE لا يضخم الأخطاء الكبيرة كما يفعل MSE. Mean Squared Error (MSE) : نستخدمه عندما نريد تضخيم نسبة الأخطاء الكبيرة بشدة لأنه يتم فيه تربيع الفروقات والذي يجعل الأخطاء الكبيرة تؤثر بشكل أكبر على النتيجة.وهو جيد عندما تكون القيم الشاذة غير مهمة لك أو تريد تضخيم تأثيرها وأيضا عندما يكون لديك نموذج تعلم آلة وتريد إعطاء أهمية أكبر للأخطاء الكبيرة مثل النماذج التي تحتاج إلى دقة عالية جدا مثل النماذج الطبية أو التي تحتاج إلى حسابات دقيقة مثل الإقتصاد وغيرها و التي يجب أن يكون نسبة الأخطاء بها صغيرة جدا والدقة عالية. Root Mean Squared Error (RMSE) : نستخدمه عندما نريد قياس الخطأ بنفس وحدات القياس الأصلية ولكننا في نفس الوقت نريد تضخيم الأخطاء الكبيرة بشكل أكبر كما في (MSE) وأيضا عندما يكون لديك تطبيقات تتطلب خطأ صغير جدا مثل تطبيقات التنبؤ بالأحوال الجوية أو الأنظمة الحساسة التي تتطلب دقة كبيرة. تلخيصا لم سبق : نستخدم MAE عندما نحتاج إلى مقياس خطأ بسيط لا يتأثر كثيرا بالقيم الشاذة. و نستخدم MSE عندما نريد تضخيم الأخطاء الكبيرة وإعطائها وزنا أكبر. و RMSE عندما نريد تفسير الخطأ بوحدة البيانات الأصلية ولكن مع تأثير للأخطاء الكبيرة. وإليك الإجابات التالية لكيفية إستخدامهم و المعادلة الخاصة لكل منهم :
  4. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
  5. وعليكم السلام ورحمة الله وبركاته. توجد عدة حلول لتلك المشكلة : إعادة توزيع البيانات بشكل متوازن : Oversampling: يمكنك زيادة عدد العينات للفئات الأقل مثل القيم الأخرى غير ال 0 عن طريق تكرارها. Undersampling: هنا يمكنك تقليل عدد العينات للفئة الأكثر وهي ال 0 عن طريق حذف بعض البيانات منها. SMOTE (Synthetic Minority Over-sampling Technique): هنا يمكنك إستخدام تلك التقنية والتي تقوم بإنشاء عينات جديدة للفئات الأقل عن طريق توليد بيانات وعينات أخرى. استخدام الأوزان (Class Weights) : عند استخدام نماذج معينة مثل الشبكات العصبية يمكنك تخصيص وزن أكبر للعينات الأقل تكرارا في بيانات التدريب مثل القيم التي تكون 5.8 أو 37.6 في المثال الخاص بك. وذلك لكي يتعلم النموذج تمثيلها بشكل أفضل. ويمكنك تعيين أوزان للفئات أثناء تدريب النموذج فمثلا في scikit-learn يمكنك استخدام class_weight='balanced' في العديد من النماذج. وفي TensorFlow أو PyTorch، يمكنك تعيين أوزان الفئات يدويا. مثال : from sklearn.linear_model import LogisticRegression class_weights = {0: 1, 1: 10} model = LogisticRegression(class_weight=class_weights) model.fit(X_train, y_train) تعديل دالة الخسارة (Loss Function) : يمكنك استخدام دالة خسارة Focal Loss والتي يتم إستخدامها عندما لا يكون هنا توزيع متوازن للبيانات والتي تقوم بإعطاء وزن أكبر للعينات الأقل .مثال : import tensorflow as tf def focal_loss(gamma=2., alpha=.25): def focal_loss_fixed(y_true, y_pred): pt = tf.where(tf.equal(y_true, 1), y_pred, 1 - y_pred) return -tf.reduce_sum(alpha * tf.pow(1. - pt, gamma) * tf.math.log(pt)) return focal_loss_fixed model.compile(optimizer='adam', loss=focal_loss(), metrics=['accuracy']) أما بخصوص الطبقة الأخيرة فإن Sigmoid يستخدم غالبا في المشاكل الثنائية (Binary Classification) حيث يكون المخرج بين 0 و 1. بينما Linear: يستخدم في مشاكل الانحدار (Regression) حيث يكون المخرج قيمة حقيقية.وهنا إذا كنت تحاول التنبؤ بقيمة مستمرة مثل efs_combined فمن الأفضل أن تكون الطبقة الأخيرة خطية (Linear) . أما إذا كنت تقوم بتصنيف ثنائي مثل هل القيمة أكبر من صفر أم لا أى تتوقع الناتج قيمة 0 أو 1 فيفضل إستخدام Sigmoid.
  6. هذه المشكلة ليست بسبب الإصدارات. سبب المشكلة (Hydration Error) في Next.js يحدث عندما لاتتطابق هيكل الصفحة HTML الذي قام بإعادته الخادم مع HTML الذي يظهر لدى العميل (المتصفح). ستجد في نهاية رسالة الخطأ الخصائص التالية data-new-gr-c-s-check-loaded و data-gr-ext-installed وهي التي تسبب تلك المشكلة. وهذه الخصائص عادة ما يتم إستخدامها بسبب إضافة Grammarly . هل تستخدم تلك الإضافة في المتصفح ؟ إذا كنت تستخدمها حاول تعطيلها وستجد أن المشكلة قد تم حلها. حيث تلك الإضافة تضيف أجزاء و خصائص لعناصر ال html مما تسبب مشكلة في عدم تطابق ال HTML الذي تم إعادته من الخادم.
  7. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل. إذا لم يكن هذا سؤال متعلق بالدورة يرجى إخبارنا .
  8. يرجى البحث في قائمة ويندوز عن IDLE حيث يأتي IDLE مسبقا مع بايثون ويتم تثبيته تلقائيا معه. ويرجى مستقبلا وضع الأسئلة المتعلقة بالدورة أسفل الدرس حيث ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
  9. أولا بالنسبة إلى التطبيقات مثل Excel و أدوات تحليل البيانات المخصصة الأأخرى فهي توفر لك واجهات رسومية تسهل عليك استخدام تلك التطبيقات مما تكون جيدة للأشخاص الذين ليس لديهم خلفية برمجية أو غير متخصصين . وتتيح لك تلك الأدوات إدخال البيانات وتنظيمها بسهولة بالإضافة إلى الخصائص والأدوات الخاصة و الأساسية بالتحيليل مثل Pivot Tables أو الرسوم البيانية وغيرها. ولكنها تفتقر إلى التخصيص حيث لن تتمكن من تخصيص ما تريده إذا لم توجد الخصائص التي تريدها و التي توفرها لك تلك الأدوات وأيضا لن تستطيع التعامل مع البيانات الكبيرة. أما Jupyter فهو بيئة تفاعلية قائمة على النصوص وهو مثل محررات الأكواد IDE ويتيح لك كتابة أكواد برمجية باستخدام لغة Python لتنفيذ عمليات تحليل البيانات. ويعطيك القدرة على تنفيذ الاكواد وعرض نتائجها في نفس الوقت في الخلية الحالية التيل تعمل عليها مما يوفر عليك الوقت وتسهيل الأمور عليك . ويمكنك من خلاله كتابة أكواد مخصصة للتحليل الذي تريده دونا التقيد بأكواد أو خصائص معينة كما كان يحدث في التطبيقات الجاهزة . لذلك إذا كنت بحاجة إلى تحليلات معقدة أو مخصصة أو إذا كنت تعمل مع بيانات كبيرة أو كنت تحتاج إلى تطبيق خوارزميات تعلم آلي فالأفضل لك هو التعامل مع Jupyter. ولكن إذا لم تكن لديك خلفية برمجية قوية و كنت تحتاج إلى خصائص بسيطة وليست مخصصة أو لم ترد التعامل مع البيانات الكبيرة فيمكنك إستخدام التطبيقات الجاهزة.
  10. وعليكم السلام ورحمة الله وبركاته. يجب عليك التأكد من أن الـ loss الذي يتم استخدامه لحساب الـ RMSE هو بالفعل Mean Squared Error (MSE) وليس نوعا آخر من الدوال الخسارة (Loss Functions). حيث إذا كان الـ loss ليس MSE فإن حساب الـ RMSE بهذه الطريقة لن يكون صحيحا. لذلك إذا كانت الدالة هيMSE فإن النسبة المئوية للخطأ التي تم الحصول عليها هي 51.93%. هذا يعني أن الخطأ في النموذج يمثل حوالي 51.93% من متوسط القيم الفعلية وهذه القيمة ليست جيدة هذه المشكلة بسبب أبعاد البيانات حيث : y_target_test يحتوي على 4320 عنصر target يحتوي على 3 عناصر فقط لذلك يرجى أولا التأكد من الأبعاد الصحيحة : print(y_target_test.shape) print(target.shape) وإذا كانت الأبعاد مختلفة يجب عليك التأكد من جعل الأبعاد متشابهة
  11. وعليكم السلام ورحمة الله وبركاته. نعم بالطبع . بشكل عام كلما كانت قيمة الـ loss أقل كان النموذج أفضل في أدائه ولكن بشرط أن يكون قد تم تدريبه بشكل جيد ولم يقع في مشكلة underfitting أو overfitting. و ال loss يمثل الخطأ الذي يرتكبه النموذج في التنبؤ،وبالتالي فإن انخفاض قيمته يشير إلى أن النموذج يتنبأ بشكل أكثر دقة وأخطاء أقل. ولكن يجب أن تنظر إلى معايير أخرى مثل accuracy أو MSE (Mean Squared Error) لفهم أداء النموذج بشكل كامل حيث في النتيجة مرفقة نجد أن ال MSE هو نفسه ال loss مما يشير إلى أن النموذج يستخدم ال MSE كدالة خسارة. وإن ال MSE يقوم بقياس الفرق بين القيم الحقيقية والقيم المتوقعة. وكلما كان أصغر كان النموذج أكثر دقة. و لكن لا يمكن مقارنة هذه القيمة مباشرة دون معرفة نطاق البيانات. فإذا كانت القيم المستهدفة y_target_test كبيرة فإن ال MSE بقيمة 15 مقبول ولكن إذا كانت صغيرة فقد يكون مرتفع . لهذا يجب أن تقارن هذا بالنسبة لحجم البيانات لديك.
  12. إذا كانت القيم مستمرة فالخيار الأفضل هو ال linear حيث أن الدالة الخطية مناسبة للتنبؤ بقيم مستمرة في نطاق غير محدود مثل 0.0 حتى 47.0. حيث إنها لا تقيد الناتج إلى نطاق معين (مثل 0 إلى 1 في حالة الـ sigmoid). أما إذا كانت القيم فئوية مثل تصنيفات أو أرقام محددة فيمكنك استخدام softmax (إذا كانت الفئات متبادلة أي إذا كانت الميزة لها فئة واحدة) أو sigmoid (إذا كانت الفئات غير متبادلة أي إذا كانت الميزة لها عدة فئات). ولك بالنسبة لمثالك هنا فإن القيم مستمرة ولهذا لا ينصح باستخدام sigmoid لأنها ستقيد الناتج بين 0 و1 حيث ال sigmoid تقوم بحصر القيم بين 0 و 1 مما يجعله غير مناسب عندما تحتاج إلى التنبؤ بقيم خارج هذا النطاق. ولكن إذا أردت إستخدام sigmoid فيمكنك تحويل القيمة في أخر طبقة للخرج هكذا : output = 47 × sigmoid وهنا سيكون النطاق بين 0 و 47 . فإذا كان ال sigmoid ب 0 سيكون النطاق 0 وإذا كان ال sigmoid ب 1 سيكون النطاق ب 47.
  13. الأمر طبيعي لا داعي للقلق كل ما يتوجب عليك الآن هو التطبيق على ما تم تعلمه وعدم الإستسلام للشعور بعدم التطبيق الكامل . حيث مع كثرة المشاريع والتطبيقات التي ستقوم بإنشاءها وأيضا التدريب عليها ستضح لك جميع الأمور التي قمت بتعلمها . أهم شئ حاليا هو التأكد من فهمك للأساسيات بشكل كبير لذلك إذا لم يكن فهمك لدروس html و css بنسبة 100% فيرجى مراجعة الدروس سريعا مع التطبيق على كل درس بشكل منفصل والتاكد من فهم كل شئ بخصوص هذا الدرس وكيفية التطبيق عليها في مشاريع حقيقية كما تم في الدروس . بعد ذلك يمكنك قراءة الأجابة التالية وهي ما سيتوجب عليك فعله بعد الإنتهاء من css و html وأيضا المواقع التي ستساعدك في التدريب على مشاريع حقيقية:
  14. وعليكم السلام ورحمة الله وبركاته. يجب عليك أولا تحديد المجال الذي تريد العمل فيه . فتلعم علوم الحاسوب فقط لن تفيدك بأى شئ سوى فقد تهيئك للدخول في المجال إذا لم تكن لديك أى خبرة مسبقة في الحاسوب أو إذا لم تكن تعلم أى مجال تريد العمل فيه وإليك الإجابة التالية لمزيد من التفاصيل حول دورة علوم الحاسوب هنا في الأكاديمية : أما إذا كنت تنوي تعلم مجال البرمجة عموما فيمكنك قراءة تلك الإجابة أيضا : وإذا كنت مهتما بتعلم تطبيقات الويب وتصميم وتنفيذ تلك المواقع فيمكنك قراءة تلك الإجابة وستفيدك فيما تبحث عنه : وهذه الإجابة بالتفصيل ستعطيك نبذه كاملة عن محتوى دورات الأكاديمية وما الذي سوف تتعلمه منها والوظيفة التي تستطيع الحصول عليها بعد تعلم تلك الدورة :
  15. وعليكم السلام ورحمة الله وبركاته. أولا يجب عليك أن تقوم بتدريب النموذج على بيانات التدريب (x_train, y_target_train) وفي أثناء التدريب يتم تحديث أوزان النموذج بناء على الخطأ (Loss) الذي يتم حسابه من بيانات التدريب. بعد ذلك في كل فترة تدريب (Epoch) أو بعد عدد محدد من الخطوات (Steps) يجب أن تقوم بتقييم النموذج على بيانات التطوير (x_dev, y_target_dev) و الهدف من هذا التقييم هو قياس أداء النموذج على بيانات لم يراها من قبل وهي بيانات التطوير التي قمت بتقسيمها للتأكد من أنه لا توجد مشكلة إفراط التخصيص (Overfitting) لبيانات التدريب. ويمكنك استخدام مقاييس مثل الدقة Accuracy الخطأ (Loss)، أو أي مقياس آخر تراه مناسبا لك. model.fit(x_train, y_target_train, validation_data=(x_dev, y_target_dev), epochs=50, batch_size=32) loss, accuracy = model.evaluate(x_test, y_target_test) print(f"Test Accuracy: {accuracy:.4f}") هنا في السطر الأول السابق إستخدمنا validation_data=(x_dev, y_target_dev) لتقييم النموذج على بيانات التطوير بعد كل فترة تدريب (Epoch). وفي السطر الثاني إستخدمنا هذا الكود لتقييم النموذج النهائي على بيانات الاختبار. ويجب عليك أن تعرف أن بيانات التطوير ليست للتقييم النهائي بل فقط نستخدمها لضبط النموذج. و عندما يكون النموذج جاهزا نستخدم بيانات الاختبار test لتقييم أداء النموذج.
  16. الصورة يتم وضعها بشكل صحيح لا مشكلة . المشكلة لديك في حجم الصورة . لاحظ كيف أن حجم الصورة لديك كبير لهذا تظهر كبيرة وبخارج ال nav. لاحظ أن طول عنصر ال a بداخل الnav هو 50px . ولكن الصورة أنت حددت لها عرض 150px وبالتالي ستأخذ طول 150px وبهذا فهي أكبر من طول عناصر ال nav ب 100px لهذا تظهر خارج ال nav. الحل هو تغير طول عناصر ال a مع تقليل ال padding في عنصر ال nav وتغير عرض وطول الصورة إلى 100px. لذلك في ملف style.css سطر 51 يجب إستبداله بالتالي : padding: 0 30px; وسطر 65 بالتالي : height: 100px; /* يمكنك تغيير الحجم حسب الحاجة */ والآن في ملف 1.html سطر 24 يرجى إستبداله بالتالي : <a href="#home" class="img2"><img src="image/logo-company.png" alt="" width="100px"></a> وإذا أردت زيادة حجم الصورة يجب زيادة الطول أيضا في سطر 65 في ملف css . ويفضل إستخدام صورة ذات أبعاد صغير وليس كبيرة حيث الصورة المستخدمة ذات أبعاد 500*500 وهي ليست جيده لوضعها في ال nav . وهذه هي النتيجة بعد التعدلات السابقة : 1.html style.css
  17. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل. إذا لم يكن هذا سؤال خاص بالدورات يرجى توضيح ذلك مع إرفاق ملفات المشروع.
  18. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
  19. وعليكم السلام ورحمة الله وبركاته. نعم، يمكنك ذلك . إذا كان العمود مثل ID يحتوي على قيم فريدة ولا يوفر أي معلومات مفيدة للنموذج مثل أرقام تعريفية كما في ال ID ، فمن الأفضل إزالته من البيانات قبل تدريب النموذج. وذلك لأن هذه القيم قد تؤدي إلى overfitting حيث من الممكن أن النموذج سيحاول تعلم النمط الخاص بال ID وه لا معنى له . بدلا من التركيز على السمات المهمة. لذلك يفضل إزالة العمود إذا كان : يحتوي على قيم فريدة لكل عينة مثل الأرقام التعريفية كما في ال ID . لا يساهم في التنبؤ أو التحليل مثل إذا كان أسماء أو أرقام عشوائية.
  20. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
  21. بخصوص مشكلة حفظ الصور في مجلد categories . إذا كان مقصدك هو حفظ المجلدات بداخل مجلد categories لتصبح المسارات هكذا : C:\laragon\www\inspro\storage\app\public\categories\6 والصور المعدلة في المسار التالي C:\laragon\www\inspro\storage\app\public\categories\6\conversions فيرجى إضافة الكود التالي بداخل ملف config\filesystems.php في disks : 'media' => [ 'driver' => 'local', 'root' => storage_path('app/public/categories'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', 'throw' => false, ], وفي ملف app\Models\Category.php يرجى إستبدال الدالة registerMediaCollections بالتالي : public function registerMediaCollections(): void { $this->addMediaCollection('categories') // تحديد اسم المجموعة 'categories' ->singleFile() // لضمان حفظ صورة واحدة فقط ->useDisk('media'); // حفظ الملفات داخل مجلد 'categories' } وسيتم حفظ الصور كما في المسارات السابقة. ولقد قمت بإرفاق الملفين بعد التعديل. أما إذا أردتي تغير المسارات الأساسية للملفات المعدلة والأساسية مثل تغير رقم ال id فيرجى قراءة التوثيق الرسمي مع مشاهدة الفيديو الموجود به وإنشاء مثل ما تم في الشرح : https://spatie.be/docs/laravel-medialibrary/v10/advanced-usage/using-a-custom-directory-structure Category.php filesystems.php
  22. من الأفضل إرفاق ملف المشروع لمساعدتك بشكل أفضل. يبدوا أنه يوجد لديكي إصدار من المكتبة لا توجد به prefix mehtod .
  23. يرجى إستخدام الكود التالي في ال model : public function registerMediaCollections(): void { $this->addMediaCollection('categories') // تحديد اسم المجموعة 'categories' ->singleFile() // لضمان حفظ صورة واحدة فقط ->useDisk('public') ->prefix('categories'); // حفظ الملفات داخل مجلد 'categories' } يجب أن يتم حفظ الملفات بداخل مجلد categories .
  24. هل يمكنكي توضيح أين المسار الذي يتم إنشاء الملفات به ؟ يبدوا أنني قد فهمت المشكلة بشكل خاطئ . هل يتم حفظهم في المجلد public الخارجي الموجود في جذر المشروع أم ماذا ؟
  25. يجب عليكي تحديد مكان المجلد الذي تريدن حفظ الصور فيه . أولا يجب عليكي البحث في ملف config\filesystems.php بداخل المصفوفة disks والبحث عن المكان المناسب لكي أو حتي إنشاء مكان جديد : 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), 'throw' => false, ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', 'throw' => false, ], فمثلا في الكود السابق يوجد disk يسمى local وستجدين أن المسار الموجود في الخاصية root هو مجلد app الذي بداخل storage. وال disk الذي يسمى public يتم تخزين الملفات بداخل المجلد app/public الموجود بداخل stroage . لهذا يجب عليكى البحث عن نفس ال root الذي هو storage_path('app/public') . وإذا لم يوجد يمكنكي إنشاء كائن جديد بداخل disks . بعد ذلك في ملف الموديل في الدالة registerMediaCollections يجب وضع useDisk مع إسم ال disk المناسب في config\filesystems.php لتصبح الدالة كالتالي : public function registerMediaCollections(): void { $this->addMediaCollection('categories') // تحديد اسم المجموعة 'categories' ->singleFile() ->useDisk('public'); // لضمان حفظ صورة واحدة فقط }
×
×
  • أضف...