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

Adnane Kadri

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

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

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

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

    52

كل منشورات العضو Adnane Kadri

  1. من على الصفحة الرئيسية لمستودعك على ال GitHub انتقل الى اعدادات المستودع الخاص بك. من القائمة اليسرى، انقر فوق branches. في قسم الفرع الافتراضي انقر على الاسهم switch to another branch استخدم القائمة المنسدلة التي تظهر وحدد الفرع الذي تريد. احفظ الاعدادات. سيتلقط github الفرع الجديد على انه الفرع الرئيسي، سيمكن الدفع اليه بشكل افتراضي
  2. التابع groupBy يقبل عددا من المعاملات، يمكنك تمرير كامل اسماء الاعمدة عبرها وسينجح الاستعلام: $posts = Posts::groupBy('first_col' , 'second_col')->get(); ايضا سيمكنك اعادة تجميع الصفوف بعد تحديدها عن طريق select: $posts = DB::table('posts') ->select(['first_col', 'second_col']) ->groupBy(['first_col', 'second_col']) ->get(); منشئ الاستعلامات في Laravel
  3. قد يحدث هذا بسبب انك تحاول الدفع الى فرع غير موجود. تأكد ان الفرع الذي تدفع اليه موجود اولا: git branch ثم جرب تنفيذ الامر: git push origin master --force او: git push origin master:main
  4. يحدث هذا لأنك تقومين بإظهار العنصر الأول عند استهداف اي حدث ضغط يخص عناصر + في: const content = document.getElementsByClassName("content")[0]; سيعني هذا اختفاء واظهار العنصر الاول عند الضغط على علامة + الاولى والثانية بذات الوقت. لتجاوز هاته المشكلة، سنحتاج تمييز اشارة ال + الاولى عن الثانية، لنقم بتعريف فهرس المكون المستهدف في عنصر الاشارة + الذي نريده. ثم سيسهل تحديده عن طريق الجافاسكربت عند الضغط عليه وبالتالي اظهار او اخفاء العنصر المراد. لنقم باضافة الخاصيتين data-target-index في كل من عنصري plus كـ: العنصر الاول <span class="plus" data-target-index="0">+</span> العنصر الثاني <span class="plus" data-target-index="1">+</span> ثم عن طريق الجافاسكربت نقوم اولا بالتقاط القيمة المخزنة في data-target-index الخاصة بالعنصر المضغوط عليه: allplus.forEach(item => { item.addEventListener("click", (eo) => { var target = item.dataset.targetIndex; وأخيرا استعمال الفهرس المحصل عليه في تحديد العنصر المستهدف واظهاره او اخفاءه: var content = document.getElementsByClassName("content")[target]; content.classList.toggle("mm") فهم الأحداث في جافاسكربت التفريق بين السمات (attributes) في HTML والخاصيات (properties) في جافاسكربت
  5. يبدوا ان هنالك مشكلة بالوصول الى ملحقات PHP واضافاتها. لنتأكد من وصف مسار صحيح في ملف اعداد php والذي هو php.ini. يكون ذاحل مجلد xampp/php قومي بالبحث عن سطر extension_dir واسندي له القيمة C:\xampp\php\ext كـ: extension_dir="C:\xampp\php\ext" قد تجدين هذا السطر: extension_dir = "./" قومي بتعليقه في حالة لم يكن معلقا: ;extension_dir = "./" ايضا لما تستعملين git bash لتنفيذ هاته الاوامر؟ هل تظهر نفس المشكلة عند استعمال طرفية windows بشكل عادي؟
  6. ما تتحدث عنه يدور حول فكرة authentication guard او حراس المصادقة. يحدد هذا الحارس كيفية تعامل لارافيل مع الطلبيات المختلفة. مثال: يحرس او يتأكد من امتلاك المستخدم رمزا مميزا يشير الى بياناته المسجلة والموثقة في جدول المستخدمين. في حالة الحاجة الى انشاء حراس مخصصين وليكن حارسا خاصا بتسجيل دخول المستخدمين المشرفين فقط. يمكن تعريف ذلك في مصفوفة guards في ملف الاعداد app/config.php : 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin_guard' => [ 'driver' => 'session', 'provider' => 'admin_users_provider', ], ], لاحظ اننا نشير الى موفر خدمة نرهنه بالحارس admin_guard. بمعنى انه يجب ايضا تعريف هذا الموفر. يكون ذلك بذات الملف في مصفوفة providers: 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'admin_users_provider' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, ], ], بعد هذا سيمكنك مباشرة استعمال هذا الحارس عن طريق حقن اسمه كمعامل في التابع guard لـ Auth: $data = ['email' => $request->email, 'password' => $request->password]; if (Auth::guard('admin_guard')->attempt($data)) { return redirect(route('admin.dashboard')); } في حالة الحاجة الى جعل هذا الحارس حارسا افتراضيا قم باسناد اسمه الى القيمة guard في المصفوفة defaults من ملف اعداد عمليات المصادقة auth.php : 'defaults' => [ 'guard' => 'admin_guard', 'passwords' => 'users', ], استفد امثر من هاته الاجابة شرح guards او guard تعرف أيضا اكثر عن الاستيثاق في لارافيل
  7. الحصول على الشهادة يتطلب المرور بكامل مراحل الامتحان التي تتضمن: حصولك على موعد لمحادثة صوتية يتم فيها نقاش ما قمت به خلال الدورة وما تعلمته فيها. تحديد مشروع تخرج يتم اعطاءه لك يكون متعلقا بما تعلمته. مراجعة المشروع والتخرج. على ان هذا يتطلب اتمام اربعة مسارات تعليمية على الاقل من الدورة التي تريد التخرج منها. رفع المشاريع المنجزة على github والتطبيق العملي مع المدرب خلال الدورة. اقرأ اكثر عن الامتحان والحصول على الشهادة
  8. نفذ الأمر npm install @types/node --save-dev سيتم تثبيت كامل ملحقات Node. التي Node:path هو من بينها.
  9. أتذكر استخدام Laravel telescope لمثل هذا الغرض. هي ملحقة محلية ببيئة تطوير لارافيل توفر نفاصيل اكثر دقة على الطلبات الواردة إلى تطبيقك، والاستثناءات ، وإدخالات السجل، والبريد، والإشعارات، وعمليات التخزين المؤقت، والمهام المجدولة، ومن بينها استعلامات قاعدة البيانات. يمكن تثبيتها كحزمة خارجية. في القسم الخاص باستعلامات قواعد البيانات تتاح قائمة لكامل استعلامات قواعد البيانات التي تم تنفيذها. سرعة التنفيذ ومدته وتفاصيل أخرى. بجانب انها صديقة جدا لبيئة التطوير. أظن انها ما تبحث عنه. يمكنك استعمالها لتحسين جودة استعلامات قواعد البيانات لديك.
  10. قمت باعداد بيئة اختبارية مناسبة، أظن ان المشكلة تحديدا هي في تكوين ملف manifest.json من طرف vite نفسه. لجبر توليد هذا الملف في وضع البناء يوجد الخيار build.manifest ضمن كائن اعداد vite في ملف vite.config.js، تعريفه سيحل كامل المشكلة: export default defineConfig({ build: { // generate manifest.json in outDir manifest: true, }, .. ثم بالطبع اعادة بناء الاصول عن طريق npm run dev. قد تواجه مشكلة تخبرك ان vite غير معرف ضمن المشروع، يمكنك تثبيته هو الآخر عن طريق npm install vite --save-dev نفس الامر بالنسبة للوحدة laravel-vite-plugin npm install laravel-vite-plugin --save-dev ثم npm run dev مجددا. ابق خادم npm مشغلا وشغل php artisan serve وسيعمل معك المشروع بشكل طبيعي. أظن ان هاته التعارضات هي بسبب كون النسخة المستعملة من لارافيل نسخة انتقالية فقط، لم يتم فيها اعداد vite بشكل نهائي ولذلك فانه من الطبيعي ان تحدث مثل هاته المشاكل. ان كان لا بد من العمل على هاته النسخة، قم بتعريف امر جديد npm run build موافق لـ vite build في ملف package.json لاخراج ملفات الاصول لاحقا "scripts": { "build":"vite build", "dev": "vite", .. اعد تشغيل npm run build وستجد انه يتم توليد الملف المشار اليه بشكل عادي. (لاحظ مجلد build الذي ظهر داخل public). قم بتعديل هذا السطر من ملف manifest.json يدويا: "resources/css\\app.css": ليصبح: "resources/css/app.css": (لاحظ ان هاته الخطوة ضرورية لتجنب مشكلة عدم التعرف على app.css بعد البناء عن طريق npm run build) ثم قم بتحديث الصفحة. سيظهر تطبيقك بشكل عادي، يمكن العمل عليه على التطوير والانتاج على حد سواء اخبرني ما ان لم يحل هذا المشكلة لديك.
  11. لا امتلك بيئة مناسبة يمكن من عليها اختبار المشروع. ان كان لا يوجد اي مشكلة بتكوين ملفات الاصول فيمكنك تضمينها مباشرة كروابط عادية: <script src="{{ asset('js/app.js') }}"></script> <link rel="stylesheet" href="{{ asset('css/app.css') }}"> في ملفات ال layouts بدل: @vite(['resources/css/app.css', 'resources/js/app.js']) في ملفي app.blade.php و guest.blade.php يقصد بـ vite manifest عن تعليمة القالب vite@ ايضا. انت في الارجح لن تحتاجه ان كانت هناك مشكلة بتكوينه.
  12. ما هي نسخة node التي تستعملها؟ ملف manifest.json المشار اليه هو ملف يصف طريقة عمل vite في وضع manifest وهو وضع يسمح للتطبيق أن يظل متاحا حتى في حالات لا يتم فيها تشغيل بيئة التطوير. يحتمل ان هنالك مشكلة بتكوينه. جرب اعادة تثبيت اعتماديات Node وتحزيم ملفات الاصول عن طريق الامرين: npm install npm run dev
  13. ان كنت تنوي تعلم الجافاسكربت او اي لغة برمجية من الكتب فلا أنصح بذلك، لأن الطريقة تقليدية قليلا ولا تعد على انها فكرة عملية يمكن الاستعانة بها في العمل بجافاسكربت على مشاريع فعلية. اما ان كنت تنوي التعمق في مفاهيم جافاسكربت فأنصح بكتاب JavaScript Enlightenment الذي ترجم الى "تعلم الجافاسكربت" من طرف عبد اللطيف ايمش. يأخذ الكتاب مفاهيم الكائنات على بعد عميق ويأخذ الجافاسكربت من منظور غير المألوف. قرأته قبل سنوات ولا زلت مهتما بالمحتوى الذي جاء فيه. يوجد ايضا فصول مترجمة من كتاب Eloquent javascript منشورة على حسوب I/O. مثلما يمكنك الاستفادة من المحتوى المكتوب المنشور على ويكي حسوب ومجموعة المقالات المنشورة على أكاديمية حسوب. ان كنت مصرا على البحث عن كتب لتعلم اساسيات جافاسكربت من الصفر فيقترح: كتاب JavaScript for Kids كتاب You Don't Know JS كتاب A Smarter Way to Learn JavaScript
  14. مرحبا نجيب، قد لا يكون تعاملك مع لارافيل مألوفا في البداية فأنت لا تزال في المسار الأول "أساسيات إطار العمل Laravel" ولا يزال أمامك 7 مسارات كاملة من التطبيق العملي ستتعمق فيها في استعمالات لارافيل وميزاته. وخصوصا مع من يأتي من خلفية Pure PHP فأنت لا تتعامل مع أكواد وشيفرات بسيطة بل تتعامل مع معماريات وأنماط وواجهات وأصناف وسمات تم تطويرها على سنين وسنين. ولذلك فإنه من الطبيعي ان تحس ببعض التيه وعدم القدرة على الانطلاق وحدك مع هاته البداية. ستعتاد في قادم المسارات أكثر على التعامل مع لارافيل وستألف طريقة بناء المشاريع وخدمة حالات الاستخدام أكثر فأكثر. لا يجب عليك اعادة كتابة التدريب كاملا، وسيكون من الكافي جدا ان تفهم وتستوعب ما قدم في هذا المسار وما تم التعرض له. بنهاية المسار ستجد انك قطعت شوطا كبيرا في التعامل مع اطار عمل بحجم لارافيل. ركز على استثمارك لمحتوى كل فيديو وكل مسار من الدورة.دون ما تراه مهما واستفسر عن ما لا تفهمه، حاول فهم مشاكلك على نحو عميق واعمل على البحث عن حلول لها واختبارها. ولا تقلق بشأن احساسك بعدم القدرة على بناء المشاريع وحدك. فالأمر يحتاج وقتا، والتغلب على هذا الاحساس هو الآخر يحتاج أكثر بكثير.
  15. في حالة تشعب اكثر من مصفوفة عن خاصية ما، يمكنك استعمال السياق parent.*.child للمرور على كامل عناصر كل مصفوفة، بشكل يمكننا من التحقق من كل خاصية كـ: "posts.*.title": 'required', "posts.*.content": 'required', "posts.*.additional_tags": 'required' في النسخ الأقدم من لارافيل قد لا يكون هذا الخيار متاحا، يمكنك على كل حال الاستعانة بتكرارة foreach لتكوين مصفوفة قواعد ومقاربة نفس النتيجة، نستعمل FormRequest مثلا كـ: public function rules() { $rules = [ 'api_key' => 'required|integer', 'tags' => 'required', ]; foreach($this->request->get('posts') as $key => $val){ $rules['posts.'.$key.'.title'] = 'required'; $rules['posts.'.$key.'.content'] = 'required'; $rules['posts.'.$key.'.additional_tags'] = 'required'; } return $rules; } التحقق (validation) في Laravel
  16. الفكرة هي أن هذا الموضوع نفسه قد تم وصفه في دليل التحديث الخاص بلارافيل 8 من نسخ سابقة كتحديث عال التأثير High Likelihood Of Impact لأن منشئات البذرة database seeders و معامل النماذج model factories ابتداءا من هاته النسخة عرفت ضمن نطاقات اسماء namespaces . اذ تقوم لارافيل بالتعرف عليها وتحميلها تلقائيا من ملف composer.json عن طريق معيار psr-4 وهو احد معايير التحميل التي شاع استخدامها في لارافيل. لفعل ذلك، أضف تعيينات نطاقات الاسماء الجديدة ضمن كائن psr-4 في autoload: "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } }, وبالطبع لا تنسى ازالة كائن classmap من autoload: "classmap": [ "database/seeds", "database/factories" ] استفد اكثر من هاته الاجابة
  17. مكتوب ان الحزمة تدعم من قبل حتى النسخة 7 من PHP ، لارافيل 9 يستعمل نسحة احدث من PHP قد تواجه مشكلة بتضمينها كحزمة خارجية ايضا.
  18. يحدث هذا لأنك تحاول تثبيت حزمة تعتمد على swiftmailer في تطبيق لارافيل هو في الارجح النسخة 9. معروف عن انه ابتداءا من هاته النسخة قد تم التخلي على swiftmailer واستبدالها رسميا ب symfony mailer وهذا لأن اطار symfony نفسه الذي يعتمد لارافيل على العديد من مكوناته قج أعلن التوقف عن دعم SwiftMailer وأطلق مكتبته الجديدة Symfony Mailer. وبالتالي فإن أجد انه هاته الحزمة smsgatewayme/client-php لم تلقى اي تحديثات منذ اربع سنوات. هذا يعني انه مخصصة لنسخ قديمة من لارافيل، جرب استعمالها مع نسخة 7 منه. وإلا فإنه يقترح البحث عن حزمة مكافئة وأحدث وأكثر مواكبة للتغيرات التي حدثت على اطار عمل لارافيل منذ ذلك الحين.
  19. يحدث هذا لأن مشروعك يصف مسارات ملفات يستعملها للتخزين المؤقت خاطئة. أظنك تستعمل تطبيق لارافيل، فهاته هي صفحة ignition التي يستعملها لارافيل في تشخيص الأخطاء. يحدث هذا الخطأ بسبب غياب الملفات المستهدفة. قم يدويا بإنشاء المجلدات التالية: views cache sessions داخل مجلد storage/framework كخطوة اضافية تابعة للخطوة السابقة، ان كنت تمتلك وصول SSH او توصلا لفتح ال terminal قم بتشغيل هاته الاوامر تباعا: php artisan cache:clear php artisan config:clear php artisan view:clear يفترض ان يعمل الآن
  20. من الطبيعي ان لا يتم رفع ملفات الاعتماديات الخارجية ضمن مستودعات للمشاركة، فهاته الأخيرة تحوي ملف وسطيا يمكن من عليه تحميل هاته الاعتماديات وتشغيلها. يشمل هذا اعتماديات composer و node. ستلاحظ أن مجلدي vendor و node_modules غائبان عن المشروع الذي تحاول استنساخه. مجلد vendor يحوي الملف المشار اليه في رسالة الخطأ لديك. لتوليد هذين الأخيرين قم بتشغيل الأمرين: composer install npm install وبالطبع فإن composer و npm يجب ان يكونا مثبتين بالفعل.
  21. prantheart غير معرف اساسا داخل حدث الضغط على bttn أي ان هذا السطر لا حاجة منه اساسا: setTimeout(() => { //prantheart.remove() بدل ذلك، لا لا تقومين فقط بتحديد حاوي عناصر القلوب وتفريغه بعد ان يتم عرضها لزمن معين؟ يمكنك استبدال سطر الحذف prantheart.remove بـ: let contenerheart = document.getElementById("contenerheart"); contenerheart.innerHTML = ''; سيتم تفريغ المحتوى بعد عرضه.
  22. ما تقصده يسمى خادم وكيل proxy server. ولا يوجد اي آداة خارقة في الموضوع. كل الأمر ان المستخدم: يقوم بارسال طلب الى خادم البروكسي يستقبل هذا الاخير الطلب ويقوم بطلب الصفحة المحجوبة عن المستخدم من على الخادم نفسه. بعد ان يتلقاها الخادم سيقوم باعادة ارسالها الى المستخدم. يتلقى المستخدم الصفحة المحجوبة عنه أي ان الامر مثلما يسمى فعليا: هة مجرد وكيل. فالمستخدم المحجوب عنه موقع ما يوكل الى الخادم مهمة طلبه عنه. وبهذا نسميه خادم وكيل. يمكنك بشكل مبدئي انشاء سكربت يقوم بهاته المقاربة. ولكن يقترح الاستفادة من أحد المشاريع مفتوحة المصدر التي تقدم خدمة مشابهة. استعن بموضوع php-proxy على الgithub (تطبيقات، سكربتات، كلاسات). تأكد فقط من ان الاستضافة التي ستقوم برفع هذا التطبيق عليها لا تحظر هذا النوع من الممارسات، اذ لا تقبل بعض الاستضافات استضافة خوادم وكيلة بشكل مصرح. تكون عادة الخوادم المخصصة او الافتراضية VPS خيارا جيدا لاستضافة مثل هاته التطبيقات.
  23. بالنسبة للواجهة الخلفية، ستمتلك معلومات جد محدودة عن الواجهة الامامية. وتعاملها لا يكون مع الوسائط media، نوعها ومميزاتها بالمعاملات المنطقية المألوفة بشكل يسمح بالعمل على استعلامات الوسائط media queries. ولكنها تتعامل مع منطق آخر تماما: العميل او User Agent. فان كنت تحاول بشكل من الاشكال القيام بـ: @if($screensize < 768px) .. اي شيفرة هنا @endif يمكنك الاعتماد على تعقب العميل والتحقق من ما ان كان يتصفح من الهاتف ومقاربة نفس النتيجة بشكل ما كـ: @if($agent->isMobile()) .. @endif يمكنك الاستفادة مما تقدمه هاته الحزمة jenssegers/agent . سهلة التثبيت وتوفر التحققات التالية: $agent->isMobile(); // التحقق من ما ان كان جهاز العميل جهاز هاتف $agent->isTablet(); // التحقق من ما ان كان جهاز العميل جهازا لوحيا $agent->isDesktop(); // التحقق من ما ان كان جهاز العميل حاسوبا مكتبيا او محمولا لاحظ ان هاته الحزمة او مثيلاتها في الواجهة الخلفية لا تتعامل مع نقاط التوقف breakpoints وانما مع تحليل نوع الجهاز. يمكنك بشكل من الاشكال معاملتها بذات المنطق، لن تختلف نقاط التوقف من جهاز لآخر إلا بشيء قليل.
  24. هل يمكنك ارفاق محتوى ملف conf.php ايضا؟ يحتمل ان يكون هنالك خطأ في طريقة استعمال الوظيفة mysqli_real_escape_sting
×
×
  • أضف...