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

Taha Khalid

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

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

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

إجابات الأسئلة

  1. إجابة Taha Khalid سؤال في مشكلة CORS في تطبيق ويب كانت الإجابة المقبولة   
    هذه المشكله شائعه و السبب الرئيسي لحدوث مشكلة CORS هو سياسات الأمان التي يتم تطبيقها على الخادم الذي تحاول الوصول إليه. عادة ما يتم تكوين الخواص CORS على الخادم للسماح أو منع الوصول إلى الموارد من مصادر مختلفة.
    في معظم الحالات، يتم تعيين رأس Access-Control-Allow-Origin على الخادم ليحدد النطاقات المسموح لها بالوصول إلى الموارد كمثال، إذا كنت تحاول الوصول إلى هذه الرابط https://example.com، يجب أن يتم تعيين الرأس Access-Control-Allow-Origin على الخادم 

    و لحل هذه المشكله يمكنك تعديل ملف .htaccess files 
    واضافة سطر الكود هذه به
    Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "GET, PUT, POST, DELETE" Header set Access-Control-Allow-Headers "Content-Type, Authorization"  
  2. إجابة Taha Khalid سؤال في ما الفرق بين sql و mysql ؟ كانت الإجابة المقبولة   
    دليل بسيط للاختلافات بينSQL و MySQL
    تعد SQL وMySQL من أكثر أدوات إدارة البيانات شيوعًا في العالم. ولكن بالنسبة للمبتدئين، أو حتى شخص لديه خبرة أكبر، فإن الفرق بين الاثنين يمكن أن يكون مربكا.
    ساحاول شرح وتحديد ماهية SQL وMySQL، ونتحقق من الاختلافات بينهما ونتعمق في بعض البدائل الاخري المتوفرة.
    ما هو SQL؟
    SQL تعني "Structured Query Language" وتنطق "إس كيو إل" أو "سيكويل". إنها نوع خاص من لغات البرمجة تُستخدم للتواصل مع قواعد البيانات.
    إذا كنت ترغب في إضافة البيانات، أو استرجاعها، أو تحديثها في قاعدة البيانات، يمكنك استخدام SQL للقيام بذلك.
    هذا مهم لأن معظم الشركات تخزن بياناتها في قواعد بيانات. هناك العديد من أنواع قواعد البيانات، ومعظمها يدعم استخدام SQL. سنناقش اثنين من هذه الأنواع في هذا المقال (MySQL و SQL Server)، ولكن هناك العديد من الأنواع الأخرى مثل PostgreSQL و IBM Db2 و Amazon Aurora، لذا يُمكن أن يكون تعلم أساسيات SQL مفيدًا بالنسبة لك بغض النظر عن نوع قاعدة البيانات التي تستخدمها أنت أو شركتك.
    حقائق ممتعة: أصبحت SQL المعيار الرسمي للمعهد الوطني للمعايير الأمريكي (ANSI) في عام 1986، وللمنظمة الدولية للتوحيد (ISO) في عام 1987. على الرغم من وجودها لعقود، إلا أنها ما زالت تستخدم على نطاق واسع ومطلوبة جدًا في الوقت الحالي!
     
    ما هو MySQL ؟
    MySQL هو نظام إدارة قواعد البيانات العلاقية مفتوح المصدر (RDBMS) يمتلكه Oracle.
    إنه أداة شديدة الشهرة لعدة أسباب. أولاً، حالته كمفتوح المصدر تعني أنه يمكن استخدامه بالكامل مجانًا. يمكن للمطورين المحترفين حتى الانغماس مباشرةً وتغيير شفرته المصدرية لتلبية احتياجاتهم إذا كانوا يرغبون في ذلك.
    على الرغم من أن MySQL مجاني للاستخدام، إلا أن Oracle تقدم خدمات دعم ممتازة يمكن شراؤها من خلال ترخيص تجاري.
    يتمتع MySQL أيضًا بدعم كبير، ويمكن للمستخدمين تشغيل البرنامج على مجموعة متنوعة من المنصات وأنظمة التشغيل بما في ذلك Windows و Linux و UNIX وغيرها.
    توفر MySQL محركات تخزين متعددة لجداولها مثل MyISAM و InnoDB و Merge و MEMORY (HEAP) و ARCHIVE و CSV و FEDERATED.
    على سبيل المثال، يقوم محرك CSV بتخزين البيانات في تنسيق ملف CSV. يمكن استخدام ذلك لنقل البيانات إلى تطبيقات بديلة غير SQL مثل برامج جداول البيانات.
    لكل من هذه المحركات مزاياها وعيوبها الخاصة. قبل إنشاء قاعدة البيانات الخاصة بك، من المهم فهم كل واحدة منها واختيار الأنسب لجداولك لتعظيم أداء قاعدة البيانات.
    لقد تناولنا فقط سطح ما يمكن أن يقدمه MySQL. ومع ذلك، يجب أن يكون هذا كافيًا لفهم الاختلافات بين SQL و MySQL.
     يعود اسم MySQL إلى أحد مؤسسيها - مايكل "مونتي" ويدينيوس - الذي أطلق عليها اسم ابنته "ماي".
    ما هو الفرق بين SQL و MySQL ؟
    باختصار، SQL هي لغة الاستعلام عن قواعد البيانات وMySQL هو منتج قاعدة بيانات مفتوح المصدر.
    يتم استخدام SQL للوصول إلى البيانات وتحديثها والحفاظ عليها في قاعدة البيانات، وMySQL عبارة عن نظام RDBMS يسمح للمستخدمين بالاحتفاظ بالبيانات الموجودة في قاعدة بيانات منظمة.
    SQL لا تتغير (كثيرًا)، لأنها لغة. يتم تحديث MySQL بشكل متكرر لأنه جزء من البرنامج.
    بعباراة الشخص العادي، يمكن اعتبار SQL بمثابة صراف بنك ويمكن اعتبار MySQL بمثابة البنك. تحتاج إلى صراف البنك (SQL) للتواصل مع البنك (MySQL) وتحتاج إلى البنك لإدارة الأموال (البيانات). إنهم يعملون جنبًا إلى جنب لكنهم مختلفون تمامًا.

    يوجد ايضا بعض المصطلحات التي يجب ان تعرفها ؟
    قاعدة البيانات
    قاعدة البيانات هي مجموعة من البيانات المخزنة في جهاز الكمبيوتر وعادة ما يتم تنظيمها بطريقة تجعل الوصول إلى البيانات سهلاً.
    نظام إدارة قواعد البيانات المرتبطة
    قاعدة البيانات العلائقية هي نوع من قواعد البيانات التي تسمح لنا بتحديد البيانات والوصول إليها فيما يتعلق بجزء آخر من البيانات في قاعدة البيانات. يقوم بتخزين البيانات في صفوف وأعمدة في سلسلة من الجداول لجعل المعالجة والاستعلام فعالين.
    مثال بسيط لقاعدة بيانات علائقية: تخيل شركة صغيرة، الشركة X، التي تتلقى الطلبات من العملاء. يقوم بإعداد جدولين في قاعدة البيانات الخاصة به:
    جدول_معلومات_العملاء (الذي يحتوي على حقول لمعرف_الزبون، والعنوان، ورقم_الهاتف، وما إلى ذلك...)
    Customer_orders_table (الذي يحتوي على حقول لمعرف_الزبون، والمنتج، والكمية، وما إلى ذلك...)
    هناك علاقة بين الجدولين (يشتركان في حقل customer_id). وهذا ما يجعل هذه قاعدة بيانات علائقية.
    في مستودع الشركة X، يقومون بمعالجة الطلبات من خلال مراجعة السجلات الموجودة في جدول طلبات العملاء. ولكن يمكنهم أيضًا استخدام customer_id في جدول الطلبات للحصول على مزيد من المعلومات حول العميل من جدول معلومات العميل.
    لا تعتبر هذه طريقة أكثر فعالية لتخزين البيانات فحسب، بل تعني أنه إذا كنت بحاجة إلى تحديث معلومات العميل، فيمكنك القيام بذلك في مكان واحد (جدول معلومات العميل)، بدلاً من الاضطرار إلى تحديث جداول متعددة بمعلومات زائدة عن الحاجة.
    اكاديمية حسوب تناولت هذه المواضيع بطريقه قويه يمكنك زيارة هذه الرابط للتعمق اكثر في موضوعك  هنا
  3. إجابة Taha Khalid سؤال في مشكله في بافميشن لارافل كانت الإجابة المقبولة   
    هذه المشكله سببها عد تضمين هذه الكود
     
    Paginator::useBootstrap(); داخل AppServiceProvider في هذه المسار 
     
    app\Providers\AppServiceProvider.php بعد الدخول هنا في هذه المسار يجب علي وضع هذه الكود 
     
    Paginator::useBootstrap(); داخل دالة ()boot 
  4. إجابة Taha Khalid سؤال في استفسار عن خدمات firebase كانت الإجابة المقبولة   
    المشكله هي انك يجب اضافة SHA-1 و SHA-256 يجب اضافته في كلا النظامي android و ios

     
    اذا كنت تعمل علي Android Studio:
    افتح مشروعك في Android Studio. انتقل إلى File > Project Structure. حدد App > Signing. انقر فوق Generate Key. حدد نوع المفتاح الذي تريد إنشاءه (SHA-1 أو SHA-256). أدخل اسمًا للمفتاح. حدد موقعًا لحفظ المفتاح. انقر فوق OK. اذا كنت تعمل علي iOS :
    افتح مشروعك في Xcode. حدد Project > Targets. حدد الهدف الذي تريد إضافة المفتاح إليه. انتقل إلى General > Signing. انقر فوق + تحت Certificates, Identifiers & Profiles. حدد Add iOS Development Certificate. حدد ملف .p12 الذي يحتوي على المفتاح. أدخل كلمة مرور الملف. انقر فوق Open.  
    ثما اخير في الفيربيز واضافة المفاتيح اليه :
    انتقل إلى موقع Firebase Console. حدد المشروع الذي تريد إضافة المفتاح إليه. انتقل إلى Settings > Project Overview. انقر فوق Add Firebase to your Android/iOS app. اتبع التعليمات لإضافة Firebase SDK إلى التطبيق الخاص بك. قم بتحميل ملف google json مره اخري من Firebase Console.  
  5. إجابة Taha Khalid سؤال في كيف اتجنب ان يحدث مشكله في السرفر بسبب الضغط كانت الإجابة المقبولة   
    يوجد طرق يمكنها حل هذه المشاكل عن تجربتي الشخصيه وتعرضي لمثل هذه المواقف أود ان اشاركك ببعض النصائح التي قد تساعدك في تجنب
    هذه المشكلة من البداية، سنتحدث هنا عن مفهوم مهم جدًا يُعرف بـ "scalability " وكيف يمكنك تحقيقه قدر الإمكان.

    التوسع الأفقي:
    في هذا النوع من التوسع، يتم زيادة عدد الخوادم أو الخوادم الفعّالة التي يعمل عليها التطبيق. على سبيل المثال، إذا كان لديك تطبيق ويب يواجه زيادة في عدد المستخدمين، يمكنك إضافة خوادم إضافية للتعامل مع هذا الضغط الإضافي دون الحاجة إلى تغيير الموارد الحالية بشكل كبير. مثلاً، إذا كان لديك موقع للتجارة الإلكترونية، يمكنك إضافة خوادم إضافية لمعالجة المزيد من الطلبات أثناء فترات الضغط
    التوسع الرأسي:
     يتم زيادة قدرات الخادم الفردي مثل الذاكرة العشوائية (RAM) أو المعالج. مثلا، يمكنك ترقية الخادم الحالي لديك بزيادة سعة الذاكرة العشوائية أو بترقية المعالج لمواجهة الضغط الزائد. ومع ذلك، يأتي التوسع الرأسي بحدود، وبمجرد أن تصل إلى هذه الحدود، ستحتاج إلى البدء في التفكير في التوسع الأفقي.
    تقسيم قاعدة البيانات:
    تقسيم قاعدة البيانات إلى أجزاء صغيرة تسمى يسمح بتوزيع الأعباء بينها، هذه يحسن من أداء عمليات القراءة والكتابة. مثلا، إذا كان لديك تطبيق يعمل على مستوى عالمي ويتعامل مع كميات كبيرة من البيانات، يمكنك تقسيم قاعدة البيانات إلى مجموعات حسب الموقع الجغرافي أو الفئة الفرعية للبيانات.
    التخزين المؤقت:
    يسمح التخزين المؤقت الاحتفاظ بالبيانات في ذاكرة سريعة الوصول لفترة مؤقتة، مما يقلل من الحاجة إلى الوصول المتكرر إلى قاعدة البيانات وبالتالي يحسن من أداء التطبيق. مثلا، يمكنك تخزين نتائج الاستعلامات الشائعة في ذاكرة مؤقتة لفترة محددة من الوقت لتقليل الضغط على قاعدة البيانات.
    توزيع الحمولة:
    توزيع الحمولة يسمح بتوجيه الطلبات بشكل متساوٍ إلى الخوادم المتاحة، هذه  يسهل التعامل مع الحمولة المتزايدة ويحسن من أداء التطبيق. على سبيل المثال، يمكن استخدام خادم وسيط (Load Balancer) لتوجيه الطلبات إلى الخوادم بشكل متساوي استنادا إلى الحمولة الحالية.
    المعالجة الغير متزامنة:
    تستخدم المعالجة الغير متزامنة للمهام التي قد تستغرق وقتًا طويلاً للانتهاء، مما يسمح بتحسين استجابة التطبيق وسرعته. على سبيل المثال، يمكن استخدام طوابو (Queues) لمعالجة الطلبات بشكل تدريجي، مما يسمح بإرسال البريد الإلكتروني لعدد كبير من المستخدمين دون تعطيل التطبيق.

     
  6. إجابة Taha Khalid سؤال في أريد توضيح عن آلية عمل باقي القسمة في البرمجة كانت الإجابة المقبولة   
    عامل modulo هو عامل رياضي يُستخدم لإيجاد بقية قسمة عدد صحيح على آخر.
    مثال:
    12 ÷ 10 = 1 (باقي 2)
    في هذا المثال، نريد إيجاد آخر رقم في 12. نقوم بقسمة 12 على 10. ناتج القسمة هو 1، والباقي هو 2.

    كيف يعمل %10:
     %10 هو نفس كتابة  10.
    عندما نقوم بقسمة عدد صحيح على 10، فإن الباقي هو آخر رقم في العدد.
    مثال بسيط يمكنك الفهم منه
    int N = 12; int M = 13; cout << N%10 + M%10; N%10 تعطي آخر رقم في N (2). M%10 تعطي آخر رقم في M (3). N%10 + M%10 تعطي مجموع آخر رقم هو (5).
     
  7. إجابة Taha Khalid سؤال في هل يوجد في لارافل باكج توفر الدول و المدن و الولايات او المراكز وتدعم اللغه العربيه كانت الإجابة المقبولة   
    نعم يوجد للدول و المدن و جميع المراكز الحزمه قد جربتها بنفسي واليك شرح الحزمه 

    اولا عليك تثبيت الحزمه 
    composer require igaster/laravel_cities عليك وضع هذه الكود في ملف app.php
    Igaster\LaravelCities\GeoServiceProvider::class, ثما يجب عليك انشاء ملف داخل مجلد storge يمكنك تنفيذ هذه الامر 
     
    mkdir -p storage/geo && cd storage/geo  ثما تنزيل بيانات جميع الدول و المدن 
    artisan geo:download اخير تصدير البيانات الي قاعدة البيانات
     
    artisan migrate artisan geo:seed طريقة الاستخدام 
     
    use Igaster\LaravelCities\Geo; Geo::getCountries(); Geo::getCountry('US'); Geo::findName('Nomos Kerkyras'); Geo::searchNames('york'); Geo::searchNames('vegas', Geo::getCountry('US')); Geo::getByIds([390903,3175395]); شرح التعليمات 
    Geo::getCountries(); هذا السطر يستخدم لاسترجاع مجموعة من البلدان كمجموعة (Collection).
    يُرجى ملاحظة أن Geo هو اسم الفئة أو الـ Class و getCountries هو الوظيفة أو الـ method الموجودة في هذه الفئة.
    Geo::getCountry('US'); يُستخدم لاسترجاع بيانات البلد الذي يتم تحديده بواسطة رمز البلد، هنا 'US' تمثل رمز البلد الولايات المتحدة الأمريكية.
    Geo::findName('Nomos Kerkyras'); يُستخدم للبحث عن بيانات محددة عن طريق اسم معين. في هذا الحالة، يبحث عن العنصر الذي يحمل الاسم "Nomos Kerkyras".
    Geo::searchNames('york'); يُستخدم للبحث عن العناصر التي تحتوي على جزء من الاسم المُعطى. في هذا الحالة، يتم البحث عن العناصر التي تحتوي على "york" في أي مكان في اسمها، بغض النظر عن الحالة (أي البحث حساس لحالة الأحرف).
    Geo::searchNames('vegas', Geo::getCountry('US')); نفس الفكرة السابقة، ولكن البحث يتم داخل البلد المُحدد. هنا، يتم البحث عن العناصر التي تحتوي على "vegas" في الاسم في الولايات المتحدة.
    Geo::getByIds([390903,3175395]); يُستخدم لاسترجاع مجموعة من العناصر بناءً على مجموعة من المعرفات (IDs) المُعطاة.
  8. إجابة Taha Khalid سؤال في انشاء صفحات الويب بالبرامج (السحب و الافلات) كانت الإجابة المقبولة   
    نعم تعرف هذه المنصات بمواقع (No-Code) 
    مواقع No-Code هي منصات وأدوات تسمح للمستخدمين ببناء تطبيقات الويب والمواقع الإلكترونية دون الحاجة إلى كتابة أي كود برمجي. يتم ذلك من خلال استخدام واجهات سهلة الاستخدام تعتمد على السحب والإفلات (Drag-and-Drop) وتحرير النصوص والاختيار من بين قوالب الجاهزة.
    المميزات الرئيسية لمواقع No-Code:
    1. توفر واجهات سهلة الاستخدام تتيح للمستخدمين بناء التطبيقات والمواقع بسرعة وبدون الحاجة إلى مهارات برمجية.
    2.  يتيح استخدام السحب والإفلات والقوالب الجاهزة تسريع عملية التطوير وتقليل الوقت اللازم لإطلاق التطبيقات والمواقع.
    3. تقليل التكاليف المرتبطة بتطوير التطبيقات والمواقع الإلكترونية عن طريق الحاجة إلى فريق برمجة.
    4.  رغم أنها تعتمد على القوالب والأدوات الجاهزة، إلا أن معظم منصات No-Code توفر خيارات للتخصيص والتعديل حسب احتياجات المستخدم.
    السلبيات الرئيسية لمواقع No-Code:
    1. بعض هذه الأدوات قد تقلل من قدرتك على التحكم الدقيق في تصميم موقعك، وذلك بسبب القيود المفروضة على الأدوات المتاحة لك والتي قد تحد من إمكانياتك في تنفيذ أفكارك بالطريقة التي تريدها.
    2.  تؤدي استخدام بعض الأدوات القاعدة على السحب والإفلات إلى إنتاج كود غير فعّال أو زائد، مما قد يؤثر على أداء الموقع وزيادة أوقات التحميل.
    3.  ستواجهه صعوبة في دمج مواقع الويب التي تم إنشاؤها باستخدام أدوات السحب والإفلات مع تقنيات أخرى أو مكتبات مثل ReactJS أو ElectronJS بسبب تناقض الأساليب والتقنيات.
    4.  من الصعب في بعض الحالات فهم الكود المولد من الأدوات التي تستخدم السحب والإفلات، مما يجعل من الصعب إجراء التعديلات أو إصلاح الأخطاء فيما بعد.

    هذه مواقع No-Code ستساعدك في بناء موقعك 
    Wix :  توفر Wix واجهة سحب وإفلات (Drag-and-Drop) تسمح للمستخدمين بسهولة تخصيص تصميم الموقع باستخدام مجموعة متنوعة من القوالب والعناصر.
    Weebly : وفر Weebly أدوات سهلة الاستخدام لتخصيص تصميم الموقع وإضافة ميزات مثل النماذج والمتاجر الإلكترونية والمدونات وغيرها.
    Squarespace : توفر Squarespace أدوات بناء موقع تسمح بالتخصيص الشامل للمواقع بما في ذلك الصفحات والمدونات والمتاجر الإلكترونية.
    Elementor (WordPress Plugin) : Elementor هو إضافة لمنصة WordPress تسمح بإنشاء صفحات الويب باستخدام واجهة سحب وإفلات.

    انصحك اذا كنت تريد بناء موقع قوي وتخصصه علي حسب احتياجك ستحتاج الي تعلم تطوير الوجهات الاماميه وهنا تاتي دور اكاديمية حسوب التي تقدم كورس تطوير وجهات الاماميه مع شهادة معتمده
     
  9. إجابة Taha Khalid سؤال في كيف اعالج هذه مشكله. CSRF token mismatch كانت الإجابة المقبولة   
    عندما تعمل علي local host , قد تواجه مشكلة مع الاتصالات غير الآمنة (HTTP). المشكلة تنحصر في أن متصفح Chrome يمنع إرسال بيانات حساسة عبر اتصالات غير آمنة. الفكرة الأساسية هنا هي أن عندما يكون الاتصال غير آمن باستخدام بروتوكول HTTP، يمكن للمتصفح منع إرسال بيانات حساسة مثل كلمات المرور أو المعلومات الشخصية. ومع ذلك، عندما يتم رفع الموقع إلى الخادم باستخدام الاتصال المؤمّن (HTTPS)، فإن هذه المشكلة تحل بسبب الطريقة التي يتم بها تشفير الاتصال وتأمينه من خلال شهادات SSL/TLS

    حل هذه المكشله اذا كنت لا تريد انت ظهر معاك يجب وضع كومنت علي هذه الكود 
    \App\Http\Middleware\VerifyCsrfToken::class web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, // \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \App\Http\Middleware\HandleInertiaRequests::class, \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class, ],
    ستجده داخل هذه المسار App/ http/kernel..php وعند الرفع علي الاستضافه يجب حذفه 
    و الافضل لمنع حدوث هذه المشاكل  ان تكتب داخل كل form هذه الكود 
     
    {{ csrf_token() }} مثال 
     
    <form method="POST" action="/submit"> {{ csrf_token() }} <div class="mb-3"> <label for="name" class="form-label">الاسم</label> <input type="text" class="form-control" id="name" name="name"> </div> <div class="mb-3"> <label for="email" class="form-label">البريد الإلكتروني</label> <input type="email" class="form-control" id="email" name="email"> </div> <button type="submit" class="btn btn-primary">إرسال</button> </form> في هذا المثال، تم استخدام @csrf داخل النموذج لتضمين رمز الرمز الأمني CSRF. عندما يتم عرض الصفحة، سيقوم Laravel تلقائياً بتوليد رمز CSRF وإضافته إلى النموذج كحقل مخفي. عندما يتم إرسال النموذج، سيقوم Laravel بفحص رمز CSRF والتأكد من أنه متطابق مع القيمة الموجودة في الجلسة، وإلا فإنه سيرفض الطلب.
     
  10. إجابة Taha Khalid سؤال في مشكله في مشروع laravel كانت الإجابة المقبولة   
    يوجد خطاء بسيط داخل الكود الخاص بك وهو لم يتم استخدام ; السيمي كلون في هذه السطر 
     
    $user->save() يبجب ان يكون بهذه الطريقه 
     
    $user->save(); اما بنسبه للمشكله الخاصه بعدم حفظ البيانات اعتقد سببها هو عدم اضافة الحقول داخل مودل User
    يجب ان يكون شكل المودل بهذه الطريقه 
     
    class User extends Authenticatable implements MustVerifyEmail { protected $fillable = [ 'name', 'email', 'password', 'email_verified_at', ]; }  
  11. إجابة Taha Khalid سؤال في مبتدي في تعلم البرمجه لارافل كيف استخدم نظام المصادقه كانت الإجابة المقبولة   
    ساحاول تبسيط الشرح علي قدر المستطاع اولا حفظ بيانات مستخدمينا واحد من أهم الأشياء التي نحتاجها في تطوير الويب ، وهذا يمكن أن يوضع تحت مظلة "الأمان". هناك طرق مختلفة لتحقيق ذلك ولاكن بطبع ساشرح بتفاصيل علي حزمة sanctum  
     
    ما هو sanctum  ؟
    sanctum  هو حزمة بسيطة تستخدم لتنفيذ المصادقة لواجهة برمجة التطبيقات API تم تصميمها لتأمين مسارات واجهة برمجة التطبيقات في تطبيقات لارافيل. sanctum حزمة خفيفة لتثبيتها في المشروع، مما يعني أنه سهل التنفيذ وبسيط.
    تثبيت الحزمه والتعرف عليها 
    عليك تثبيت الحزمه بواسطة الأمر التالي 
     
    composer require laravel/sanctum ثما عليك تنفيذ الامر التالي لكي تعمل بدون مشاكل
    php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" اخر شئ في تثبيت الحزمه 
     
    php artisan migrate مثال علي استخدام Sanctum
    يجب عليك إنشاء وحدة التحكم بهذه الطريقه 
     
    php artisan make:controller UserAuthController كيفية انشاء المصادقه مثل , انشاء الحساب, تسجيل الدخول , تسجيل الخروج

    عليك الاتجاه لهذه المسار
    routes\api.php
    ثم خذه هذه الكود نسخ ثما الصقه بداخل هذه الملف
     
    use App\Http\Controllers\AuthController; Route::post('register',[UserAuthController::class,'register']); Route::post('login',[UserAuthController::class,'login']); Route::post('logout',[UserAuthController::class,'logout']) ->middleware('auth:sanctum');  
    هذا الكود يوضح كيفية تعريف مسارات (Routes) في إطار عمل Laravel للتعامل مع عمليات المصادقة (Authentication). يتم استخدام Sanctum، لتأمين بعض العمليات.
    المسار 'register' يقوم بتنفيذ الدالة 'register' في AuthController عندما يتم إرسال طلب POST إلى 'register'.
    المسار 'login' يقوم بتنفيذ الدالة 'login' في AuthController عندما يتم إرسال طلب POST إلى 'login'.
    المسار 'logout' يقوم بتنفيذ الدالة 'logout' في AuthController عندما يتم إرسال طلب POST إلى 'logout'. ويتم تطبيق مرشح (Middleware) بإسم 'auth:sanctum' على هذا المسار، وهذا يعني أنه يجب أن يكون المستخدم مصادقاً (مسجلاً الدخول) باستخدام Sanctum قبل أن يتمكن من تنفيذ عملية 'logout'.
    إضافة وظيفة انشاء الحساب
    انتقل إلى app\http\controllers\UserAuthController وأضف هذه الدوال
     
    public function register(Request $request){ $registerUserData = $request->validate([ 'name'=>'required|string', 'email'=>'required|string|email|unique:users', 'password'=>'required|min:8' ]); $user = User::create([ 'name' => $registerUserData['name'], 'email' => $registerUserData['email'], 'password' => Hash::make($registerUserData['password']), ]); return response()->json([ 'message' => 'User Created ', ]); } ضع هذه الكود في الملف هذه وظيفة مختصه في انشاء الحساب , نقوم بالتحقق من صحة البيانات الواردة للتأكد من أن جميع البيانات واضحة وتطابق القاعدة، إذا كانت جميعها جيدة، فتقم بإنشاء مستخدم.

    إضافة وظيفة تسجيل الدخول
     
    public function login(Request $request){ $loginUserData = $request->validate([ 'email'=>'required|string|email', 'password'=>'required|min:8' ]); $user = User::where('email',$loginUserData['email'])->first(); if(!$user || !Hash::check($loginUserData['password'],$user->password)){ return response()->json([ 'message' => 'Invalid Credentials' ],401); } $token = $user->createToken($user->name.'-AuthToken')->plainTextToken; return response()->json([ 'access_token' => $token, ]); }  
    نحن نقوم بالتحقق من صحة الطلب والتأكد من وجود مستخدم بهذه المعلومات، ثم نقوم باستدعاء الدالة createToken() لإنشاء رمز مميز (Token) للمستخدم المسجل عن طريق تمرير اسمه أو أي معلومة ترغب فيها. بعد ذلك، نقوم بالوصول إلى خاصية plainTextToken بتسلسل الوصول للحصول على قيمة الرمز كنص عادي. في النهاية، نقوم بإرجاع استجابة JSON تحتوي على الرمز.

    في النهايه إضافة وظيفة تسجيل الخروج
     
    public function logout(){ auth()->user()->tokens()->delete(); return response()->json([ "message"=>"logged out" ]); } الآن نحصل فقط على المستخدم الذي تمت مصادقته ونحذف الرموز الخاصة به

     
  12. إجابة Taha Khalid سؤال في مساعده في كود laravel php كانت الإجابة المقبولة   
    التخزين المؤقت (Caching) هو تقنية تُستخدم لتخزين واسترداد البيانات التي يتم الوصول إليها بشكل متكرر بطريقة أسرع وأكثر كفاءة. في تطبيقات الويب، يؤدي التخزين المؤقت دورًا حاسمًا في تقليل حمل الخادم وتحسين أوقات الاستجابة، مما يؤدي إلى تحسين تجربة المستخدم. عندما يطلب المستخدم بيانات من تطبيق ويب، يمكن للتطبيق تخزين نتيجة ذلك الطلب في ذاكرة التخزين المؤقت. في المرة القادمة التي يتم فيها طلب نفس البيانات، يمكن للتطبيق استخدامها مباشرة من التخزين المؤقت بدلاً من إعادة حسابها أو استدعائها من مصدر البيانات الأصلي، مثل قاعدة البيانات أو واجهة برمجة التطبيقات الخارجية.

    الفوائد الرئيسية للتخزين المؤقت في Laravel هي:
    1. أوقات استجابة أسرع: من خلال تقديم البيانات المخزنة مؤقتًا، يمكن للتطبيق الاستجابة لطلبات المستخدم بشكل أسرع بكثير، حيث تكون البيانات متاحة بسهولة دون الحاجة إلى استعلامات أو حسابات قاعدة بيانات باهظة الثمن.
    2. انخفاض تحميل قاعدة البيانات: يمكن أن تؤدي استعلامات قاعدة البيانات المتكررة إلى الضغط على خادم قاعدة البيانات، مما يؤدي إلى بطء الأداء. يساعد التخزين المؤقت على إلغاء تحميل قاعدة البيانات عن طريق خدمة البيانات التي يتم الوصول إليها بشكل متكرر من ذاكرة التخزين المؤقت.
    3. قابلية التوسع المحسنة: يسمح التخزين المؤقت للتطبيق بالتعامل مع المزيد من المستخدمين المتزامنين بكفاءة، حيث يمكن تقديم البيانات المخزنة مؤقتًا دون استهلاك موارد الخادم الإضافية.

    اولا دعنا نشرح File Cache Driver
    1. يقوم برنامج التشغيل هذا بتخزين البيانات المخزنة مؤقتًا كملفات على نظام ملفات الخادم.
    2. إنه أبسط برنامج تشغيل للتخزين المؤقت ولا يتطلب أي تبعيات خارجية.
    3. مناسب تمامًا لبيئات التطوير واحتياجات التخزين المؤقت البسيطة.
    مثال على التعليمات البرمجية: تخزين البيانات واسترجاعها باستخدام برنامج تشغيل ذاكرة التخزين المؤقت للملفات
    // تخزين البيانات في ذاكرة التخزين المؤقت Cache::put('key', $data, $expirationInSeconds); if (Cache::has('key')) { $data = Cache::get('key'); } else { // البيانات غير الموجودة في ذاكرة التخزين المؤقت، قم بإحضارها من المصدر الأصلي وتخزينها مؤقتًا. $data = fetchDataFromDatabase(); Cache::put('key', $data, $expirationInSeconds); } ثانيا لنقم بشرح Database Cache Driver
     
    1. يقوم برنامج التشغيل هذا بتخزين البيانات المخزنة مؤقتًا في قاعدة البيانات.
    2. مفيد عندما تريد مشاركة بيانات ذاكرة التخزين المؤقت بين خوادم متعددة في بيئة متوازنة التحميل.
    3. أبطأ من برنامج تشغيل ذاكرة التخزين المؤقت للملفات بسبب عمليات قاعدة البيانات.
    مثال التعليمات البرمجية: تخزين البيانات واستردادها باستخدام برنامج تشغيل ذاكرة التخزين المؤقت لقاعدة البيانات
    Cache::store('database')->put('key', $data, $expirationInSeconds); if (Cache::store('database')->has('key')) { $data = Cache::store('database')->get('key'); } else { $data = fetchDataFromDatabase(); Cache::store('database')->put('key', $data, $expirationInSeconds); } ثالثا لنقم بشرح اخر شئ و هو Redis Cache Driver
    1. يستخدم برنامج التشغيل هذا Redis، وهو مخزن بيانات في الذاكرة، للتخزين المؤقت.
    2. يعد Redis سريعًا وفعالًا للغاية، مما يجعله الخيار الموصى به لاحتياجات التخزين المؤقت عالية الأداء.
    3. مناسب تمامًا للأنظمة الموزعة وسيناريوهات التخزين المؤقت المعقدة.
    مثال على الكود: تخزين البيانات واسترجاعها باستخدام برنامج تشغيل Redis Cache
    Cache::store('redis')->put('key', $data, $expirationInSeconds); if (Cache::store('redis')->has('key')) { $data = Cache::store('redis')->get('key'); } else { $data = fetchDataFromDatabase(); Cache::store('redis')->put('key', $data, $expirationInSeconds); } لارافيل  يوفر العديد من محركات التخزين المؤقت (Caching Drivers)، وكل منها له فوائد وقيوده الخاصة. اختيار آلية التخزين المؤقت يعتمد على متطلبات تطبيقك الخاصة ومستوى الأداء والقابلية للتوسع الذي تحتاجه. عن طريق استغلال التخزين المؤقت بفعالية، يمكنك تحسين أوقات الاستجابة والأداء العام لتطبيق لارافيل بشكل كبير.
     
     
×
×
  • أضف...