-
المساهمات
1783 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
1
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Khaled Osama3
-
لا ليس بالضرورة أن يكون الجهاز الذي عليه ملفات الموقع تعمل 24 ساعة لكي يعمل الموقع. الطريقة الصحيحة هي تحميل الموقع على خادم ويب (Web Server) يعمل على مدار 24 ساعة. الموقع الشخصي يمكن تحميله على جهاز المبرمج دون حاجة لخادم دائم. المواقع التجارية أو الهامة يفضل تحميلها على خادم متخصص يعمل 24/7. عند إغلاق جهاز المبرمج لن يتمكن الزوار من الوصول للموقع. الخوادم المتخصصة مثل AWS, GCP, Azure توفر بيئة احترافية 24/7. فالموقع يعتبر "دائم" فقط إذا كان محملاً على خادم يعمل 24 ساعة، أما الجهاز الشخصي فلا يضمن الوصول الدائم.
- 4 اجابة
-
- 1
-
-
نعم، المحتوى المقدم في هذا المقال لا يزال صالحًا وفعالًا لاستخدامه مع لارافيل 10. على الرغم من أن بعض التفاصيل التقنية قد تكون قد تغيرت قليلاً منذ ذلك الحين، إلا أن المبادئ الأساسية لإدارة الصور في لارافيل تظل نفسها. يغطي المقال المواضيع الأساسية مثل إنشاء النموذج والهجرة والمتحكم وإنشاء المجلدات لتخزين الصور وعمل عرض إنشاء لرفع الصور هذه الأشياء لا تزال سارية المفعول في لارافيل 10. ربما تتغير بعض التفاصيل الثانوية مثل إصدارات الحزم أو طرق الكتابة، ولكن المبادئ الأساسية لا تزال نفسها. الحزم مثل Intervention Image وlaravelcollective/html تتم صيانتها بشكل منفصل عن Laravel نفسه، لذا يجب تحديثها مع إصدار Laravel 10. بشكل عام، يجب أن تكون متوافقة طالما تم تحديثها بشكل دوري لدعم الإصدارات الجديدة من Laravel. ولكن يجب الرجوع إلى الوثائق الرسمية لـ Laravel 10 للتأكد من أية تغييرات في ممارسات أفضل أو ميزات جديدة متوفرة في Laravel 10. لذلك يمكنك بالتأكيد استخدام هذا المقال لبناء ميزة إدارة الصور في مشروع لارافيل 10 خاص بك.
-
يمكنك بسهولة القيام بذلك باستخدام خدمة اختصار الروابط على موقع بلوجر وإعداد إعادة التوجيه للروابط المختصرة إلى الروابط الأصلية أو أي روابط ترغب في توجيهها إليها. وهذه بعض الخطوات اللى ممكن تستعين بيها للقيام يهذه المهمة: استخدام خدمة اختصار الروابط على بلوجر: يمكنك البحث عن خدمة اختصار الروابط على بلوجر أو استخدام أي امتداد أو خدمة توفر هذه الخدمة. يمكنك إضافة روابطك الأصلية والمختصرة على هذه الخدمة. إنشاء روابط مختصرة: قم بإنشاء روابط مختصرة باستخدام خدمة اختصار الروابط. عندما يتم النقر على هذه الروابط المختصرة، ستتم إعادة التوجيه بشكل تلقائي إلى الروابط الأصلية. إعادة التوجيه إلى بلوجر: يمكنك تكوين إعادة التوجيه من الروابط المختصرة إلى بلوجر عن طريق تحديد عنوان URL لصفحة بلوجر الخاصة بك. هذا يمكن أن يتم عبر لوحة التحكم في بلوجر أو عبر الخدمة التي تستخدمها لإدارة روابطك. بهذه الطريقة، عندما يتم فتح الرابط المختصر، سيتم توجيه المستخدم بشكل تلقائي إلى صفحة بلوجر الخاصة بك، ومن ثم سيتم التوجيه من بلوجر إلى الرابط الأصلي الذي تم اختصاره.
- 7 اجابة
-
- 1
-
-
إذا كنت تستخدم قالب اختصار الروابط على ووردبريس، فيمكنك بسهولة استخدامه لإنشاء روابط مختصرة تعيد التوجيه إلى صفحات البلوجر أو أي روابط أخرى ترغب في تخزينها. في هذه الحالة، لا داعي لاستخدام بلوجر كخدمة لاختصار الروابط. بمجرد تثبيت وتفعيل قالب اختصار الروابط على موقع ووردبريس الخاص بك، يمكنك بسهولة إنشاء روابط مختصرة لأي عنوان URL تريده، سواء كان ذلك لصفحات بلوجر أو صفحات أخرى. عندما يتم النقر على الرابط المختصر، سيتم إعادة التوجيه بشكل تلقائي إلى العنوان URL الأصلي. لذا، بإمكانك استخدام ووردبريس لإدارة جميع روابطك، بما في ذلك الروابط التي تعيد التوجيه إلى صفحات بلوجر أو أي مواقع أخرى، دون الحاجة إلى استخدام بلوجر كخدمة لإنشاء الروابط المختصرة.
- 7 اجابة
-
- 1
-
-
عليكم السلام يمكنك بناء موقع لاختصار الروابط بأي منصة تطوير ويب تدعم البرمجة وقواعد البيانات. يمكنك استخدام بلوجر لإنشاء موقع لاختصار الروابط، ولكن ستحتاج إلى القيام ببعض البرمجة الخاصة وربما استخدام خدمات تخزين البيانات الخارجية(Cloud). من ناحية أخرى، ووردبريس هي منصة تدعم بناء مواقع لاختصار الروابط بشكل أسهل، حيث تتيح لك إمكانية استخدام الإضافات المتاحة في سوق الإضافات الخاص بـ WordPress لإنشاء موقع لاختصار الروابط بسرعة وسهولة دون الحاجة إلى البرمجة الخاصة. إذا كنت تفضل استخدام بلوجر، فيجب أن تكون على علم بأنك ستحتاج إلى القيام بالبرمجة الخاصة لإضافة وظيفة اختصار الروابط وتخزينها، كما ستحتاج إلى التعامل مع الاستضافة والتحكم في قاعدة البيانات بشكل مباشر. بالمقابل، إذا استخدمت ووردبريس، يمكنك الاعتماد على الإضافات المتاحة التي تقدم هذه الوظيفة بشكل مباشر، مما يجعل العملية أسهل وأكثر فعالية بدون الحاجة إلى البرمجة الخاصة.
- 7 اجابة
-
- 1
-
-
في تطوير البرمجيات، يُشير مصطلح "الإغلاق" (Closure) إلى مفهوم يسمح للدالة بالوصول إلى المتغيرات اللى محيطة بها حتى بعد الانتهاء من تنفيذها، يعتبر هذا مهمًا في اللغات التي تدعم التعريفات المتداخلة للدوال (nested functions)، حيث يمكن للدالة الداخلية (المحتواة داخل دالة أخرى) أن تستخدم المتغيرات المحيطة بها حتى بعد ما تخلص تنفيذ الدالة الخارجية. الإغلاق يحدث عندما تُنشئ دالة داخلية في نطاق (scope) دالة أخرى وتستخدم متغيرات من نطاق الدالة الخارجية. عندما يتم تنفيذ الدالة الداخلية، فإنها تحتفظ بإمكانية الوصول إلى المتغيرات التي كانت متاحة في النطاق الخارجي في وقت تعريفها. الإغلاق يمكن أن يكون ذا قيمة خاصة عند التعامل مع التعامل مع المعالجات الحدثية (Event Handling) أو عند استخدام دوال رد الاتصال (Callback Functions) حيث يمكن للإغلاق أن يحمل متغيرات معينة في الوقت الذي يتم استدعاء فيه. وهذا مثال للتوضيح JavaScript: function outerFunction() { let outerVariable = 'I am outer!'; function innerFunction() { console.log(outerVariable); // يمكن للدالة الداخلية استخدام outerVariable } return innerFunction; } let closureExample = outerFunction(); closureExample(); // الإغلاق يسمح للدالة الداخلية بالوصول إلى outerVariable حتى بعد انتهاء تنفيذ outerFunction. هذا المثال يظهر كيف يمكن للدالة الداخلية (innerFunction) في الداله الخارجية outerFunction أن تتمكن من الوصول إلى المتغير outerVariable حتى بعد انتهاء تنفيذ outerFunction.
-
أنه يعمل معى جيدا، وبيطلع نمعطى 5. لكن ما هو ال compiler الذى تستخدمه؟
- 4 اجابة
-
- 1
-
-
ارجو التوضيح اكثر متي يتم شطبها؟
-
الفرق الرئيسي بين كتابة الحلقات بأقواس منحنية وبدونها يكمن في نطاق جسم الحلقة وهذا مثال يوضح الفرق: مع الأقواس المنحنية: عند استخدام الأقواس المنحنية، تعرف بوضوح نطاق جسم الحلقة. يتيح لك هذا تضمين عدة بيانات داخل جسم الحلقة دون أي ابهام بشأن نطاقها. على سبيل المثال: for (int i = 0; i < 5; i++) { System.out.println("داخل الحلقة"); System.out.println("قيمة i هي: " + i); } بدون الأقواس المنحنية: إذا حذفت الأقواس المنحنية، فإن البيانات التالية ستعتبر جزءًا من جسم الحلقة. يمكن أن يؤدي هذا إلى الارتباك والأخطاء إذا كانت العديد من البيانات تهدف إلى كونها جزءًا من جسم الحلقة ولكنها ليست مضمنة في الأقواس المنحنية. على سبيل المثال: for (int i = 0; i < 5; i++) System.out.println("داخل الحلقة"); System.out.println("قيمة i هي: " + i); // هذه ليست جزءًا من جسم الحلقة في هذا المثال، تعتبر فقط البيانات System.out.println("داخل الحلقة"); جزءًا من جسم الحلقة، بينما البيانات System.out.println("قيمة i هي: " + i); خارج جسم الحلقة وسيتم تنفيذها مرة واحدة فقط بعد انتهاء الحلقة.
- 5 اجابة
-
- 1
-
-
ارسل الكود للتوضيح اكثر
- 5 اجابة
-
- 1
-
-
بهذه الطريقة يمكنك وضع اى اسم تريده مكان name c.execute("DELETE FROM names WHERE name = ?", (name,))
- 3 اجابة
-
- 1
-
-
هذا ما تحتاجه للقيام بهذه المهمة // تنفيذ استعلام SQL للحصول على القيمة القصوى ل SupplierID string query = "SELECT MAX(SupplierID) FROM TBL_SUPP"; // قم بتنفيذ الاستعلام هنا باستخدام مكتبة الوصول إلى قاعدة البيانات الخاصة بك // قم بتخزين النتيجة في متغير maxID int maxID = executeQueryAndGetMaxID(query); // قم بتعيين القيمة القصوى ل SupplierID + 1 في حقل txtSupplierID txtSupplierID.Text = (maxID + 1).ToString();
-
نغم تفيد كل ما عليكى هو فهم كيفية إنشاءها ومن ثم عملها بأى لغة برمجة.
- 17 اجابة
-
- 1
-
-
نعم يدخل فى مهام مطور واجهة المستخدم. اذا كنت تريد عمله باستخدام مكتبة bootstrap فيمكنك ذلك عن طريق استخدام مكتبة Polylang. ونعم يوجد فى أخر دورة تطوير تطبيقات الويب باستخدام لغة PHP فصل عن التعريب وهو شبيه جدا للتوطين ، وفعال اكثر منه. رابط الدورة:https://academy.hsoub.com/learn/php-web-application-development/
- 17 اجابة
-
- 1
-
-
سوف اقوم بشرحها لك عن طريق مثال: تخيل أن الدوال هي مثل الأدوات في علبة أدوات البرمجة. لكن في حالة الدوال ذات النظام العالي، يمكنك أن تتعامل مع هذه الأدوات بطريقة أكثر مرونة وقوة. بدلاً من أن تكون مقيدًا بطريقة معينة لاستخدام الأدوات، يمكنك استخدام هذه الأدوات لبناء أدوات أخرى أو حتى تمريرها إلى أدوات أخرى لتفعيل مهام معينة. لنفهم ذلك بمثال بسيط. لنفترض أن لديك دالة تُسمى "ضرب_في_اثنين" تأخذ عددًا وتضربه في 2 وترجع الناتج. في البرمجة التقليدية، ستبدو الدالة بهذا الشكل: def multiply_by_two(number): return number * 2 def apply_operation(number, operation): # هذه هى high oreder function return operation(number) result = apply_operation(5, multiply_by_two) print(result) #الناتج سيكون 10 هنا ايضا تم تمرير الدالة multiply_by_two كمدخل لدالة apply_operation، والتي قامت بتنفيذ الضرب على الرقم 5.
- 4 اجابة
-
- 1
-
-
تحتاجين لتعلم التوطين (localization). التوطين هو عملية تكييف المنتج أو التطبيق ليكون ملائمًا لسوق محدد أو لغة معينة أو ثقافة معينة. يتضمن التوطين تعديل النصوص والرسومات والتصميمات والتوجيهات البرمجية بحيث تتوافق مع الاحتياجات والتفضيلات الثقافية واللغوية للمستخدمين في السوق المستهدف. يشمل التوطين تغيير النصوص، وتعديل التنسيق والتصميم ليناسب الثقافة واللغة المستهدفة، وتحويل العملات والتوقيت إلى النظام المستخدم في البلد المستهدف، وتوفير ترجمة للواجهة والمحتوى، بالإضافة إلى تعديل الأشكال والرموز الخاصة بتوافقها مع الثقافة المستهدفة. على سبيل المثال، إذا كنت تطور تطبيقًا للهواتف الذكية وترغب في إطلاقه في الأسواق العربية، فسيكون عليك توطين التطبيق ليدعم اللغة العربية، وقد يتطلب ذلك ترجمة النصوص إلى العربية، وضبط التصميم ليدعم الكتابة من اليمين إلى اليسار، وتغيير بعض الرموز والصور لتتناسب مع الثقافة العربية، وغيرها من التعديلات المتعلقة باللغة والثقافة. ويمكنكى استخدام لغة ال JavaScript للقيام بهذه المهمة. وهذا مثال بسيط للتوطين بين اربعة لغات مختلفة، اللغة العربية والإنجليزية والفرنسية والإسبانية. function translateText(text, targetLanguage) { // قاموس الترجمة const translations = { "مرحبا": { "en": "Hello", "fr": "Bonjour", "es": "Hola" }, "كيف حالك؟": { "en": "How are you?", "fr": "Comment ça va?", "es": "¿Cómo estás?" }, }; // التحقق مما إذا كان النص موجودًا في قاموس الترجمة if (translations[text]) { // إذا كان النص موجود، فتحقق من توفر الترحمة للغة المستهدفة if (translations[text][targetLanguage]) { // إذا وجدت الترجمة، قم بإرجاعها return translations[text][targetLanguage]; } else { // إذا لم تجد الترجمة، قم بإرجاع النص الأصلي return text; } } else { // إذا لم يكن النص موجودًا في قاموس الترجمة، قم بإرجاع النص الأصلي return text; } }; const originalText = "مرحبا"; const targetLanguage = "en"; // اللغة المستهدفة هنا هي الإنجليزية const translatedText = translateText(originalText, targetLanguage); console.log(translatedText); // Output: Hello
- 17 اجابة
-
- 1
-
-
اذا كان هذا سؤال فنعم.
- 7 اجابة
-
- 1
-
-
الفرق الرئيسى بينهم أن MySQL عبارة عن قاعدة بيانات و SQLite3 عبارة عن مكتبة يتم تضمنها فى ال تطبيق لديك وهذا مقارنة تفصيلية بينهم نوع الخادم: MySQL: يتم تشغيل MySQL كخادم قاعدة بيانات مستقل يستجيب للاتصالات من عملاء متعددين. SQLite3: يتم تضمين SQLite3 كمكتبة داخلية في التطبيق ويتم الوصول إليها مباشرة دون الحاجة إلى خادم قاعدة بيانات منفصل. المتطلبات والتثبيت: MySQL: يتطلب تثبيت وتكوين خادم MySQL منفصل، ويحتاج إلى مساحة وذاكرة كبيرة. SQLite3: لا يتطلب تثبيت منفصل، حيث يمكن استخدام ملف SQLite3 بسهولة داخل التطبيق بدون أي تكوينات معقدة. الاداء: MySQL: يمكن أن تكون قواعد البيانات الكبيرة ومعالجة العمليات المتعددة تحت ضغط متزايد. SQLite3: تكون الأداء أسرع وأبسط بشكل عام، ولكن قد تظهر بعض القيود في الأداء عند التعامل مع قواعد بيانات كبيرة أو العمليات المتعددة. الدعم والمجتمع: MySQL: يتمتع MySQL بدعم كبير ومجتمع نشط، مما يعني وجود العديد من المصادر والموارد المتاحة للمستخدمين. SQLite3: يحظى SQLite3 أيضًا بدعم واسع النطاق، ولكن قد يكون أقل بعض الشيء من MySQL نظرًا لطبيعته الخفيفة والموجهة نحو التطبيقات الصغيرة. الوظائف والقدرات: MySQL: يوفر MySQL مجموعة واسعة من الوظائف والميزات مثل التعقيد العالي والتنمية الجماعية والتحكم في النسخ الاحتياطي. SQLite3: تكون ميزات SQLite3 أقل قليلاً من MySQL، حيث يركز SQLite3 على توفير وظائف أساسية لإدارة قواعد البيانات بشكل بسيط وفعال.
- 7 اجابة
-
- 1
-
-
$(document).ready(function(){ let $qty__up = $(".qty-up"); let $qty__down = $(".qty-down"); let $input = $(".qty_input"); // click on qty up button $qty__up.click(function(e){ e.preventDefault(); let currentValue = parseInt($input.val()); if(currentValue >= 1 && currentValue <= 9){ $input.val(currentValue + 1); } }); // click on qty down button $qty__down.click(function(e){ e.preventDefault(); let currentValue = parseInt($input.val()); if(currentValue > 1 && currentValue <= 10){ $input.val(currentValue - 1); } }); }); يمكنك تجربة هذا الكود بعد التعديل ، وحاول التأكد من ال conditions اللى هل هى صحيحة وهل تقوم بما تريده جيدا .
-
يرجي ملاحظه ان الكود المرسل لا يحتوي علي إغلاق تعليمة if بقافلة } يجب ان تضع علامه } بعد هذا السطر mysqli_stmt_close($stmt); وقبل هذا السطر ?>.
- 9 اجابة
-
- 1
-
-
ارجو ارسال رساله الخطأ الذي تظهر لك. يرجي ملاحظه ان الكود المرسل لا يحتوي علي إغلاق تعليمة if بقافلة }.
-
نعم، إذا أردت استخدام mysqli بدلاً من PDO، فهذه هي الطريقة الصحيحة لتحضير الاستعلام وتنفيذه بشكل آمن لمنع هجمات الحقن الـ SQL. ومع ذلك، يمكن تحسين الكود قليلاً لجعله أكثر وضوحًا وفعالية. إليك النسخة المحسنة: // الاستعلام مع العلامات الاستفهام كعناصر نائبة للقيم $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES (?, ?, ?)"; // تحضير الاستعلام $stmt = mysqli_prepare($conn, $sql); // التحقق من تحضير الاستعلام بشكل صحيح if (!$stmt) { die("Something went wrong: " . mysqli_error($conn)); } // ربط القيم المدخلة بالعناصر النائبة في الاستعلام mysqli_stmt_bind_param($stmt, "sss", $fullname, $email, $feedback); // تنفيذ الاستعلام if (mysqli_stmt_execute($stmt)) { echo "<div class='alert alert-success'>Feedback submitted successfully.</div>"; } else { echo "<div class='alert alert-danger'>Error submitting feedback: " . mysqli_stmt_error($stmt) . "</div>"; } // إغلاق البيان mysqli_stmt_close($stmt); لاحظ أنني استخدمت mysqli_error($conn) لطباعة الخطأ مباشرة إذا فشلت عملية التحضير، وmysqli_stmt_error($stmt) لطباعة الخطأ إذا فشلت عملية التنفيذ هذا يساعدك لتتمكن من تشخيص المشكلات بدقة وفعالية. بالإضافة إلى ذلك، يجب دائما إغلاق البيان بعد الانتهاء منه باستخدام mysqli_stmt_close($stmt) لتضمن أن تطبيقك لا يستهلك موارد أكثر مما يحتاج ويبقى خادمك أو جهازك يعمل بسلاسة وفعالية، مما يساعد على تجنب المشاكل المحتملة المتعلقة بالأداء أو الذاكرة.
- 9 اجابة
-
- 1
-
-
يوجد بعض الاخطاء: في ملف الاتصال بقاعدة البيانات، يبدو أن هناك بعض التباس بين استخدام mysqli وPDO. كلاهما طريقتين ممتازتين للتفاعل مع قاعدة البيانات، لكن عليك ان تختار واحده فقط من بينهم؛ اختر إما mysqli أو PDO واستخدمها consistent في جميع أنحاء مشروعك. عند كتابة استعلامات SQL، من المهم جدًا تجنب الحقن لكود خبيث في قاعدة بياناتك. تخيل أنك تكتب رسالة سرية وتريد التأكد من أن الشخص الوحيد الذي يمكنه فهمها هو الشخص المقصود. استخدام العلامات الاستفهام (?) أو الأسماء المستعارة (:placeholder) في استعلاماتك يشبه استخدام رموز سرية تضمن أن الرسالة (البيانات) تصل بأمان وبالطريقة التي تريدها. لحماية قاعدة البيانات من اللصوص الرقميين الذين يحاولون "حقن" كود خبيث لسرقة البيانات أو التسبب في الفوضى، من الضروري استخدام طرق الربط مثل bindParam أو bindValue. هذا يشبه وضع قفل إلكتروني متطور على باب منزلك يتطلب مفاتيح رقمية خاصة للدخول. بهذه الطريقة، تضمن أن تطبيقك يتحدث مع قاعدة البيانات بلغة مشفرة وآمنة، مما يحمي معلوماتك ويجعل تجربة المستخدم أكثر أمانًا واستقرارًا. إذا قررت الاستمرار باستخدام PDO، إليك كيفية تحديث الكود: في feedback.php: // تأكد من أن الاستعلام يستخدم الأسماء المستعارة $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES (:fullname, :email, :feedback)"; $stmt = $conn->prepare($sql); // ربط القيم بالأسماء المستعارة باستخدام bindParam $stmt->bindParam(":fullname", $fullname); $stmt->bindParam(":email", $email); $stmt->bindParam(":feedback", $feedback); try { $stmt->execute(); echo "Feedback submitted successfully!"; } catch(PDOException $e) { echo "Error submitting feedback: " . $e->getMessage(); } وفي database.php، إذا كنت تريد استخدام PDO بدلاً من mysqli: $hostName = "localhost"; $dbUser = "root"; $dbPassword = ""; $dbName = "feedBack"; // استخدام PDO للاتصال بقاعدة البيانات try { $conn = new PDO("mysql:host=$hostName;dbname=$dbName", $dbUser, $dbPassword); // تعيين وضع الخطأ PDO ليكون exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("Something went wrong: " . $e->getMessage()); } بعد فعل هذه التغييرات، يمكنك ان تجرب مره اخري ان تدخل بيانات وستسجل في قاعده البيانات.
- 9 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته، لوصول إلى مستوى الاحتراف كلمه نسبيه قد تختلف من مكان لأخر ومن مجال لأخر ولكن دعنا نبدلها بكلمه مؤهل لسوق العمل, لتصبح مؤهل لسوق العمل في البرمجة يعتمد على عدة عوامل. الأنشطة التي ذكرتها مثل قراءة الكتب ومشاهدة الدورات التدريبية وحل التمارين على مواقع مثل ليت كود ستساعدك كثيرا في فهم شامل للمفاهيم البرمجية والاساسيات وتطوير مهارة حل المشكلات والتفكير الحسابي وفهم الخوارزميات وهياكل البيانات. بناء مشاريع حقيقية أيضًا مهم لتطبيق ما تعلمته وفهم كيفية عمل الأكواد في الواقع. وإن كنت تواجه أي صعوبة، فمواقع مثل تشات جي بي تي قد تساعد بتقديم بعض الحلول والنصائح. لكن لتصبح مؤهل لسوق العمل بالفعل، يجب أن تستمر بالممارسة والتطبيق العملي الكثير، وتحليل أي أخطاء وتعلم منها. العمل أيضا ضمن فريق قد يساعدك على تحسين قدرتك على التعاون والمتابعة مع شخص لديه خبره اكثر منك للأستشاره قد يفيدك كثيرا. والحصول على خبرة عملية سواء من خلال العمل في مشاريع حقيقية أو تدريبات ميدانية فبالرغم من أهمية ما ذكرته إلا أن الخبرة العملية هي الأفضل للوصول لمرحلة الاحتراف. والحصول على شهادات معتمدة في مجال البرمجة لزيادة فرص العمل. ولا تنسى دائما تحديث مهاراتك بمتابعة التطورات الجديدة لان مجال البرمجة يتطور سريعا. باتباع هذه النصائح والمثابرة، ستصبح بالتأكيد مؤهلا لسوق العمل في مجال البرمجة.
- 2 اجابة
-
- 1
-
-
Laravel Sanctum يوفر نظام مصادقة بسيط وخفيف الوزن لـ SPA (Single Page Applications)، والخدمات المتنقلة، والتوكنات البسيطة المستندة إلى API. إليك عده خطوات بسيطه لانشاء نظام المصادقة باستخدام Laravel Sanctum: 1. تثبيت Sanctum: composer require laravel/sanctum 2. نشر التكوين في دليل التكوين الخاص (config): php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" 3. تشغيل الترحيلات (Migrations): يجب تشغيل الترحيلات لإنشاء جداول البيانات اللازمة لـ Sanctum. php artisan migrate 4. إضافة Sanctum's Middleware: يجب إضافة Sanctum's middleware إلى مجموعة الـ api middleware في ملف app/Http/Kernel.php: 'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 5. إعداد نموذج المستخدم: يجب أن يستخدم نموذج User الخاص بك trait HasApiTokens من Sanctum. use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, Notifiable; } 6.: تكوين الحماية لحماية الـ routes التي تتطلب مصادقة، استخدم middleware sanctum. في ملف api.php أو web.php (حسب تطبيقك)، قم بإضافة sanctum كـ middleware للـ routes: Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); 7. إنشاء الحساب وتسجيل الدخول وتسجيل الخروج: تسجيل الدخول في AuthController (قد تحتاج إلى إنشائه): use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use App\Models\User; use Illuminate\Http\Request; // تسجيل الدخول public function login(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); $user = User::where('email', $request->email)->first(); if (!$user || !Hash::check($request->password, $user->password)) { return response()->json(['message' => 'Unauthorized'], 401); } $token = $user->createToken('authToken')->plainTextToken; return response()->json(['token' => $token]);} إنشاء حساب: // إنشاء حساب public function register(Request $request) { $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:8|confirmed', ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); $token = $user->createToken('authToken')->plainTextToken; return response()->json(['token' => $token]); } تسجيل الخروج: public function logout(Request $request) { // إبطال جميع رموز الوصول للمستخدم الحالي $request->user()->tokens()->delete(); return response()->json(['message' => 'تم تسجيل الخروج بنجاح']); } 8. تعريف المسارات: في routes/api.php, قم بإضافة المسارات اللازمة للتسجيل وتسجيل الدخول. Route::post('/register', [AuthController::class, 'register']); Route::post('/login', [AuthController::class, 'login']); Route::middleware('auth:sanctum')->post('/logout', [AuthController::class, 'logout']); تأكد من استيراد AuthController في أعلى ملف api.php. 9. اختبار الـ API: يمكنك الآن اختبار إنشاء الحساب وتسجيل الدخول باستخدام Postman بإرسال طلبات POST إلى /api/register و /api/login و /api/logout مع البيانات المطلوبة. تأكد من مراجعة الوثائق من الموقع الرسمي لتنفيذ كل خطوة https://laravel.com/docs/master/sanctum.