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

سمير عبود

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

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

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

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

    34

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

  1. هل قمت بإستيراد مكتبة cookie-parser تحتاج إلى الطبقة الوسيطة cookieParser قبل التعامل مع ال cookies لتثبيتها: npm i cookie-parser ثم تقوم بإستيراد المكتبة: const cookieParser = require('cookie-parser'); بعد ذلك تستخدم الطبقة الوسيطة ضمن التطبيق: app.use(cookieParser()); ثم تستطيع إضافة cookie: res.cookie('cookieName', 'cookieValue');
  2. يجب تواجد الحقل user_id قبل إعتماده كمفتاح أجنبي، لذلك يظهر لديك خطأ أن الحقل user_id غير موجود. ويجب عند إضافة المفتاح الأجنبي أن يكون الحقلين من نفس النوع حيث أن id في جدول users عبارة عن unsignedBigInteger لذلك يجب أن يكون أيضاً الحقل user_id نوعه unsignedBigInteger $table->unsignedBigInteger('user_id'); $table->foreign('user_id')->references('id')->on('users'); نُعرف الحقل ثم نٌعينه كمفتاح ثانوي. في النُسخ الحديثة بالإمكان إختصار السطرين أعلاه إلى سطر واحد: $table->foreignId('user_id')->constrained(); أو: $table->foreignId('user_id')->constrained('users'); بحيث نُمرر إسم الجدول للتابع constrained إذا لم نتبع الأعراف في التسميات. بالإمكان إستخدام التوابع cascadeOnUpdate أو cascadeOnDelete و غيرها: $table->foreignId('user_id') ->constrained() ->cascadeOnDelete();
  3. أعتقد أنك تستخدم حزمة Sanctum و قد أنشأت ملف التهجير الخاص بالرموز السرية بنفسك ولم تقم بنشره عن طريق الأمر: php artisan vendor:publish --tag=sanctum-migrations بالتالي أصبح لديك ملفين تهجير لنفس الكلاس و هنا يحدث الخطأ. لقد ذُكر في التوثيق الرسمي: migration-customization أنه في حالة اردت التخصيص تحتاج إلى إستدعاء الميثود Sanctum::ignoreMigrations في التابع register من الصنف App\Providers\AppServiceProvider. و هذا حتى يتم إهمال ملف التهجير الخاص بالحزمة و الإعتماد على ملف التهجير الخاص بك فقط.
  4. يستحسن أن يكون لديك خلفية و لو بسيطة بلغات الويب الأساسية و ذلك لأننا سنستخدمها في المسارات التطبيقية و العملية، تستطيع قبل البدء في دورة تطوير تطبيقات بإستخدام php متابعة المسار الأول من دورة تطوير واجهات المستخدم مسار أساسيات تطوير الويب الذي يحتوي على شرح وافي لهذه التقنيات و من خلاله تستطيع دخول دورة php بدون اي مشكلة. إن قمت بالإشتراك في أي دورة من دورات الأكاديمية ستتمكن من الوصول إلى المسارات الأولى من بقية الدورات.
  5. في ملف المسارات user.js لديك: let usercontroller = require("../controller/usercontroller") router.get("/user",usercontroller) التابع get يقبل callback function كوسيط ثاني و انت تُمرر له كائن. يجب تغيير ذلك إلى: let usercontroller = require("../controller/usercontroller") router.get("/user",usercontroller.view) أيضا ملف conn.js لا يُمكنه الوصول إلى متغيرات البيئة يجب نقل التالي للأعلى في ملف app.js: const express = require('express') require('dotenv').config() // هذا السطر موجود في الأسفل يجب نقله قبل عملية الإتصال let con = require("./conn") بداخل الملف conn.js هناك إستعمال لمتغير غير مُعرف هو conn: conn.query("SELECT * FROM customers", function (err, result) { if (err) throw err; console.log(result); }); // الصواب con.query("SELECT * FROM customers", function (err, result) { if (err) throw err; console.log(result); }); الأفضل دائما نشر صورة لرسالة الخطأ الذي يظهر لك أو نسخ رسالة الخطأ كاملة ووضعها ضمن السؤال، حتى نستطيع المساعدة بشكل أفضل.
  6. إن تعلم البرمجة شيء سهل و بسيط لكنه يحتاج بذل الكثير من الجهد و الوقت خصوصاً في البدايات لأن الإنسان بطبيعته يستصعب دائما تعلم الأشياء الجديدة، المصطلحات و التقنيات الموجودة في المجال عديدة لذلك قد يتوه كثيراً، قد يدخل مجال البرمجة و بسبب تعلمه العشوائي رُبما يترك المجال أو يُعيد التعلم من البداية، لذلك الأصح أخذ طريق واضح المعالم من البداية، لهذا السبب نجد جميع المختصين في المجال ينصحون المبتدئين بوضع هدف مُعين لدخولهم مجال البرمجة: هل أريد أن أكون مطور ألعاب؟ هل أريد أن أصبح مطور تطبيقات سطح مكتب؟ هل أريد أن أصبح مطور تطبيقات هواتف ذكية؟ هل أريد أن أصبح مطور مواقع ؟ هل ... طرح هذا السؤال سيُساعدك في اختيار المجال الذي ترغب أن تتعلمه و تبرز فيه كمبرمج و لعل أفضل المقالات التي ستضعك على الطريق هي: تعلم البرمجة بعد قراءة المقال ستأخذ نظرة عامة حول معظم المجالات، و التي ستُساعدك في البحث عن دورات في المجال الذي اخترته سواء مجانية أو مدفوعة. يُمكنك حينها أيضاً إستخدام محرك البحث لمعرفة التقنيات التي إذا تعلمتها ستُصبح مبرمج محترف على سبيل المثال لنفترض أنك تريد أن تُصبح مطور تطبيقات أندرويد إبحث عن: android development roadmap github سيُرشح لك بعض النتائج أدخل على إحداها مثلاً: android-developer-roadmap ستجد خريطة لمُعظم التقنيات و الأساليب التي يجب عليك تعلمها لتكون محترف في مجالك من خلالها يُمكنك أخذ الطريق خُطوة بخُطوة. و هكذا تفعل إذا اخترت مجال مغاير.
  7. الفكرة تُشبه لما يلي: <?php $account = AccountModel::where('store_id', $store_id)->first(); if ($account === null) { $newCode = 1; } else { $newCode = $account->account_code + 1; }
  8. ماذا تقصد بهذا ؟ أليس id يبدأ من 1 ثم السجل الذي يليه سيكون 2 و هكذا و ما فائدة account_code في هذه الحالة.
  9. إذا لاحظت أنه حتى تُحدد العُنصر الحاوي للزر لتلك المنشورات التي تحتوي على صور فقط هناك شيء إضافي و هو صنف has-post-thumbnail الذي يتواجد في وسم article الذي يحتوي على صورة و لا يتواجد في غيره، من خلاله يُمكنك تحديد العناصر المطلوبة التي تريد أن يكون تنسيقها مختلف: article.has-post-thumbnail .page-box .box-content .readmore-btn{ } لاحظ لا يوجد فراغ بين article و has-post-thumbnail. في المحدد لاننا نريد العُنصر article و في نفس الوقت يملك الصنف has-post-thumbnail
  10. غير واضحة هيكلية العناصر، من الصور التي أرفقتها وجدت أن الزر بداخل وسم div الذي يملك الصنف readmore-btn، يُمكنك إستخدام خصائص الصندوق المرن flexbox بإعطاء التنسيقات التالية له: .readmore-btn{ display: flex; justify-content: end; } لاحظ أنني أعطيت العُنصر الحاوي للزر الخاصية flex حتى يُصبح صندوقاً مرنا لنستطيع التحكم في توزيع العناصر داخله بسهولة، و بما أننا نريد أن يظهر الزر في الأخير استخدمت الخاصية justify-content التي تُساعد في تموضع العناصر على المحور x و بالتالي أعطيتها القيمة end. يُمكنك الإطلاع على المثال على codepen فهو يُشبه وضعيتك:
  11. إن كنت تريد مُبرمج في مشروع بمُقابل مادي يُمكنك طرح مشروعك على منصات العمل الحر مثل مُستقل او خمسات و سيقوم المستقلون بعرض خدماتهم عليك لتختار من تلك العروض ما يُناسبك. مستقل خمسات
  12. بالعكس تماما فدورة تطوير التطبيقات بإستعمال لغة php و إطار Laravel من بين أفضل الدورات و ذلك لأنها تحتوي على عدة مسارات تطبيقية التي ستُكسبك خبرة في التعامل مع المشاريع ستتعلم من خلال هذه المشاريع كيفية التحليل و البدأ في مراحل إنشاء المشروع و هذا الأمر سيُساعدك في الدخول إلى سوق العمل. و الشيء الجيد أنك ستحصل على متابعة من طرف مختصين لتحسين سيرتك الذاتية و حسابك الشخصي على مواقع العمل الحر. من الأفضل لك تحديد و تسطير الأهداف التي تريد أن تصل إليها و البدأ في مشوارك التعليمي و إذا واجهتك مُشكلة ما إبحث و استفسر عنها لأن ذلك هو السبيل في التطور، دع عنك التخوف و التردد لأنك ستبقى دائما في نفس النُقطة إذا لم تتخلص من مخاوفك فمسيرة الألف ميل تبدأ بخطوة، أنا متأكد تماما لو أنك إغتنمت الثمانية أشهر الماضية لكنت اليوم في مستوى آخر. تأكد أيضاً أن المجال واسع جدا و دائماً هناك أشياء جديدة فيجب على المطور دائما أن يواكب هذا التطور. @اسماعيل صدوقي يُمكن أن يُضيف بعض النصائح لك فهو متخرج من نفس الدورة.
  13. مرحباً خليل، في مثل هكذا حالات يُمكن التواصل مع فريق الدعم من مركز المساعدة و إطلاعهم على مُشكلتك بالتفصيل و سيعملون على حلها و مساعدتك في أقرب وقت.
  14. و عليكم السلام و رحمة الله و بركاته، لا لن تحتاج إلى مشاهدة و متابعة المسارات الأقدم إذا لم تكن قد بدأت بها. لا أعتقد أن المسارات الأقدم تدخل في حسبة الوقت فقط المسارات الجديدة. الفرق بينهما هو أن المسارات القديمة تستعمل مكتبات و تقنيات بإصدارات أقدم و الطلاب تواجههم فيها بعض المشاكل بسبب عدم التوافق في الإصدارات و ما إلى ذلك، المسارات الجديدة تحتوي على شرح أفضل، إصدارات أحدث من المكتبات و أطر العمل المُستخدمة، تقنيات أشهر و أفضل على سبيل المثال لا الحصر مسار تطوير واجهات متجر إلكتروني في المسار القديم كان الشرح يعتمد على تقنية gulp في أتمتة المهام أما المسار الجديد فيعتمد على webpack، حتى أن هذا المسار تم تحديثه مرة أخرى بإستعمال إصدارات حديثة من مكتبة webpack. مسار بناء خمس صفحات هبوط يعتمد على بوتستراب الإصدار الرابع في المسار القديم أما الجديد يعتمد على الإصدار الخامس و هو آخر إصدار. و هكذا في بقية المسارات و الدورات يتم تحديثها بإستمرار. المسارات الجديدة قد تكون تحديث لمسار موجود او إضافة مسار جديد.
  15. يُمكنك من خلال التابع eloquent تكوين الإستعلام الذي تُريد و تمريره له <?php public function dataTable($query) { $query = User::query()->where(function ($q) { if (request()->has('level')) { return $q->where('level', request('level')); } }); return datatables() ->eloquent($query) ... } أو يُمكنك القيام بذلك في الميثود query من صنف Datatable لأنه تم توفيرها لإنشاء و التحكم في الإستعلام كما تشاء: <?php public function query() { return User::query()->where(function ($q) { if (request()->has('level')) { return $q->where('level', request('level')); } }); }
  16. سبب المُشكلة أن الدالة update يجب أن تٌمرر لها 3 معاملات هي request و guest و id حيث أنها تلقت معاملين فقط و هما request و guest أي أن المُعامل الذي لم يتم تمريره هو id عند التنفيذ. أي أنه عند وضعك لمسار الدالة الموافق لها يجب تمرير كل من المُعاملين id و guest حيث أن المعامل request يتم حقنه من طرف لارافل تلقائياً. هذا ما يعنيه الخطأ أي أنك إن واجهت نفس الخطأ مرة ثانية يجب أن تُفكر بهذا المنطق. الآن سأسألك سؤال لماذا أضفت المُعامل id للدالة update و أنت بالفعل تملك بيانات الزائر مُسبقاً في المُعامل guest ؟ في نظري لست بحاجة لتمرير المُعامل id و لست بحاجة لوضعه كمعامل للدالة update كما لست بحاجة لجلب بيانات الزائر (guest) عن طريق: $guest= Guest::find($id); لارافل تقوم بذلك تلقائياً عن طريق ما يُسمى بربط النموذج بالمسار (Route model binding) بالتالي كل ما تحتاج له هو مسح المُعامل id من الدالة update و مسح السطر السابق.
  17. كما ذكر الأخ وائل، برنامج Laragon متوفر فقط لأنظمة ويندوز، و على نظام ماك او اس يوجد بدائل أخرى ك Mamp و Xampp. لكن إن كنت تريد توفير بيئة تطوير لإطار لارافل فأحد الخيارات المتاحة البسيطة و السريعة هي valet يُمكنك إتباع صفحة valet على توثيق لارافل لتثبيت و التعامل معها لخدمة مشاريعك على جهازك. قبل تثبيت valet يجب تثبيت: Homebrew الذي يُعتبر مدير حزم خاص بنظام ماك او اس ثم تقوم بتحديث Homebrew عن طريق الأمر: brew update ثم يجب إستخدام Homebrew لتثبيت PHP: brew install php بعد ذلك يجب تثبيت composer الذي سنستخدمه لتثبيت valet: composer global require laravel/valet أخيراً يجب تنفيذ: valet install الذي سيقوم بإعداد valet على جهازك. بعد تثبيت valet و إعدادها ستُصبح جاهز لبدء خدمة تطبيقات Laravel الخاصة بك. يوفر Valet أمرين لمساعدتك في خدمة تطبيقاتك: park and link. بعد تنفيذ الأمر: valet park بداخل أحد المسارات التي تريدها. كل التطبيقات التي تضعها بداخل ذلك المسار ستكون مُخدمة عن طريق رابط خاص بها سيكون الرابط من الشكل http://<directory-name>.test حيث directory-name هو إسم المجلد الذي يحوي ملفات ذلك التطبيق على سبيل المثال إن قمت بإنشاء تطبيق لارافل بالإسم tasks فيُمكنك الوصول إلى التطبيق من خلال المتصفح عن طريق http://tasks.test.
  18. يبدو أنه لديك خطأ ما في ملف style.css لا يُمكننا معرفة سبب الخطأ إذا لم يكن لدينا الملفات التي تعملين عليها. إن كنت مُشتركة في أحد دورات الأكاديمية و ظهرت لديك هذه المُشكلة بعد متابعتك لدرس ما يُفضل طرح إستفسارك في صفحة ذلك الدرس و سنتابع معك هناك.
  19. لديك مُشكلة في المُتغير form حيث إستخدمت الإسم form في تعريفك للمُتغير في الأعلى: const form = document.querySelector("form"); إستخدمت هنا الكلمة المحجوزة const لتعريف المتغير فأصبح ثابت لا يُمكن إستخدام نفس الإسم لتعريف مُتغير بنفس الإسم لذلك عند تعريفك للمُتغير مرة أخرى: var form = document.getElementById("feed-back"); أعطى خطأ وسبب المُشكلة. لحل المُشكلة قم بتغيير إسم المتغير في الأسفل إلى إسم آخر: var feedForm = document.getElementById("feed-back"); و إستعمال نفس الإسم: var feedForm = document.getElementById("feed-back"); async function handleSubmit(event) { event.preventDefault(); var status = document.getElementById("status"); var data = new FormData(event.target); fetch(event.target.action, { method: feedForm.method, body: data, headers: { 'Accept': 'application/json' } }).then(response => { status.classList.add('success'); status.innerHTML = "Thanks We will respond as soon as possible!"; feedForm.reset() }).catch(error => { status.classList.add('error'); status.innerHTML = "Oops! There was a problem submitting your form" }); } feedForm.addEventListener("submit", handleSubmit) أيضاً أنصحك بوضع الأكواد مع بعضهم في الأسفل و نضعهم بداخل: document.addEventListener("DOMContentLoaded", function (event) { }); الملف بعد التعديل: FeedBack.html
  20. هل بإمكانك توضيح الشيفرات التي ترى أنها تُسبب المُشكلة، يُمكنك رفع الملف الذي تُحاول تشغيله، حتى نستطيع مُساعدتك بشكل جيد
  21. أنا أيضاً لم أفهم النظام بشكل كامل، لكن كما ذكر الأخ وائل هيكلية الجداول هي من ستُسهل عليك العملية، و الهيكلية المناسبة هي جدول لبيانات الطباعة و جدول لبيانات الألوان و العلاقة هي أن كل سجل من جدول الطباعة يُمكن أن يكون له عدة سجلات من جدول الألوان أي تضع حقل print_id في جدول الألوان كمفتاح أجنبي على جدول بيانات الطباعة. عملية الإنشاء تكون كالتالي: - إستعلام لإنشاء سجل الطباعة - إستعلام آخر لإنشاء سجلات الألوان المُرتبطة بسجل الطباعة نفسه. أعتقد أنك قد قمت بها. أما عملية التعديل ستكون كالتالي: - إستعلام لتعديل بيانات سجل الطباعة - إستعلام لحذف بيانات سجلات الألوان المُرتبطة (السجلات القديمة) - إستعلام آخر لإضافة بيانات سجلات الألوان المُرتبطة (الجديدة). طريقة تطبيق الفكرة تعتمد عليك و على الخصائص التي تريد توفيرها في صفحة التعديل مثلا إن كانت عدد حقول الألوان ستبقى ثابتة في مرحلة التعديل فالأمر بسيط أما إن كان الأمر مُتغير أي يُمكن للمُستخدم تغيير عدد الحقول فتحتاج إلى وضع آلية لحذف عناصر الألوان و إضافتها (مثلاً توفير زر أمام كل حقل عند الضغط عليه يحذف العُنصر نفسه من الصفحة و زر آخر عند الضغط عليه يُضيف عُنصر جديد ) خُذ الأمر مرحلة بمرحلة حاول تطبيق أساس الفكرة و بعد ذلك إن اردت التطوير يُمكنك ذلك.
  22. إن الدروس 17 كافية لتعلم الأساسيات التي تحتاجها في تعلمك لمجال تطوير الواجهات الأمامية، الهدف من الدورة ليس إحترافك للغة جافاسكربت في حد ذاتها و إنما الدخول في مجال تطوير الواجهات الأمامية و إستخدام التقنيات و اللغات الأساسية في تطوير الويب مع بعضها في مشاريع حقيقية و فعلية و هذا ما يُميز دورات أكاديمية حسوب عن بعضها: الجانب التطبيقي و الجانب التوجيهي هو أكثر شيء مفيد لك في أكاديمية حسوب. ليس الهدف من الدورات هو شرح كل الخاصيات الموجودة في لغة ما و إنما الهدف هو شرح المفاهيم الأساسية التي ستحتاج لها في مجال الدورة و في مُعظم المشاريع أي المفاهيم الأساسية و هذا الجزء سيتم شرحه في مسار الأساسيات و مفاهيم أخرى ستتعلمها في الجانب التطبيقي. ليست الدورة هي من ستُعلمك كل شيء الأكيد أنها ستكون جزء من تعلمك و دافع و حافز لك، لكن الجزء الأكبر الذي سيزيد من مستواك و يُطورك هو أنت، حبك للمجال، إرادتك و شغفك في التعلم. نصيحة ستفيدك في طريقك: أي شيء يمر عليك و لا تعرفه أو تجد فيه لُبس ما إبحث عنه و أقرأ عنه، إجعل مُحرك البحث صديقك الدائم، بالتوفيق.
  23. حتى تظهر الصورة في ImageView نستخدم الخاصية src و نضع مسار الصورة التي نريد عرضها أنت لا تستخدمها حاول تعديل: tools:srcCompat="@drawable/ic_launcher_background" إلى android:src="@drawable/ic_launcher_background" ثم قم بعمل build مرة أخرى.
  24. بإمكانك إستخدام خواص الصندوق المرن (Flex Box) للوصول إلى ما تريد و هذا مثال عن ما تريد بالضبط على codepen: كما يُمكنك الإطلاع على بعض المقالات على الأكاديمية للتعرف على خواص الflex box منها: تعرف على CSS Flexbox وأساسيات استعماله لهيكلة صفحات الويب أساسيات Flexbox في CSS مع أمثلة عملية
  25. هناك صعوبة في جذب أول عميل لك على المنصة بسبب المنافسة الكبيرة بين المستقلين لكن هذا لا يمنع أبدا من حصولك على أول فرصة لذلك هناك بعض النقاط عليك الإهتمام بها منها معرض أعمالك يجب أن يكون واضح و يخدم المجال الذي تعمل فيه، العرض الذي تُقدمه، السعر الذي تعرضه، وقت تقديم العرض، كلها نقاط إن اهتممت بها ستُسرع في قبولك على أحد المشاريع، هناك بعض المساهمات تم طرحها من قبل الأعضاء ستكون مفيدة لك أنصحك بالإطلاع عليها: كما يُمكنك الإطلاع على: دليل المستقلين يوجد هنالك عدة مقالات مفيدة لك، كما بإمكانك الإطلاع على بعض الكتب و المقالات أيضاً التي نشرتها الأكاديمية هنا على المنصة: مقالات العمل الحر كتب العمل الحر
×
×
  • أضف...