يوسف احمد9

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

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

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

السُّمعة بالموقع

16 جيدة
  1. يوجد أخي مكتبة لل React native تقوم بعمل نفس فكرة ال local storage بإسم AsycnStorage
  2. لأنه فى المثال الثاني أخي متغير الداتا يعتبر Array of json objects ولذلك يمكنك إسترجاع القيم منها عن طريق data[0].name وأيضاً أخي هذا ال Syntax غير صحيح لأوبجكت ال Json على شكل Array const data = [ { name : 'dddd', age : 20, }, { name : 'dddd', age : 20, } ] هذه هي الطريقة الصحيحة
  3. نقوم بتخزين تلك البيانات في local storage او indexed db فى البراوزر window.localStorage.setItem('user', JSON.stringify(res.data.user)); في هذا السطر قمنا بتخزين بيانات المستخدم في local storage ولكي نسترجع القيم المخزنة window.localStorage.getItem('user');
  4. أول شئ يجب معرفته أخي أن داله ال asset الخاصة بلارافيل يتم إستخدامها عند الحاجة لتضمين ملفات الجافا إسكربت أو ملفات الإستايل أو حتى الصور الموجودة بالمشروع الخاص بنا داخل فولدر ال public وإذا كان ملفات الإستايل خارج الموقع الخاص بنا يتم وضع الرابط مباشرة <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> أما إذا كان لدينا ملف ال font-awesome.min.css داخل فولدر ال public مثلا فى المسار التالى public css font-awesome.min.css نستخدم تلك الطريقة <link href="{{ asset('css/font-awesome.min.css') }}" rel="stylesheet">
  5. السلام عليكم أخي الكريم .. تلك المشكلة سببها أن ال csrf token قد إنتهت المدة الخاصة بها ولحل تلك المشكلة لديك طريقتين هو أن تقوم بالضغط على الرابط من البراوزر مجدداً لكي تقوم الصفحة بالعمل من جديد ويقوم فريم ورك لارافيل بعمل csrf token صالحة من جديد والطريقة الثانية هي الأفضل لأنه ربما يحدث هذا الخطأ أيضاً مع المستخدم فلذلك يجب علينا حل تلك المشكلة use Illuminate\Session\TokenMismatchException; /** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Throwable $exception * @return \Symfony\Component\HttpFoundation\Response * * @throws \Throwable */ public function render($request, Throwable $exception) { if ($exception instanceof TokenMismatchException){ return redirect()->back(); } return parent::render($request, $exception); } يوجد ملف بإسم Handler.php داخل مسار App/Exceptions وهذا الملف الذي يقوم لارافيل فيه بالتحكم فى أنواع ال Exceptions المختلفة عن طريق فانكشن render حيث بداخل تلك الداله نقوم بوضع شرط إذا كان هذا ال Exception من نوع TokenMismatchException يقوم بعمل ريدايركت مرة أخرى للمستخدم حتى لايظهر ذلك الأيرور 419 Token MisMatch أخيراً نضع هذا الكود فى أي فورم من نوع Post أو Put أو Patch أو Delete <form action="" method="POST"> <input type="hidden" name="_token" value="{{ csrf_token() }}" /> </form>
  6. يوجد طرق عديدة أخي الكريم فى هذا الموضوع أنا شخصيا فى عملي نقوم بفصل الأدمن عن ال Api بحيث الأدمن بانل تكون مشروع Laravel خاص بها وال Api تكون على مشروع Lumen وليس لارافيل لان ال Lumen معمولة لأغراض ال Api ويتم وضع ال Api على نفس سيرفر الأدمن ولكن فى الأغلب يتم وضعها على سيرفر خارجي عن الأدمن ودومين مختلف تماماً ولكن مشروع الأدمن وال Api يتصلان بنفس قاعدة البيانات .. ولتلك الطريقة سبب منطقي لانه إذا حدث فى يوم من الأيام ضغط على مشروع ال Api وكان يوجد إحتياج أننا نقوم بزيادة سيرفر لل APi فى تلك الحاله سنقوم بعمل شئ يسمى Load Balancer بحيث يكون عندنا نفس المشروع على أكثر من سيرفر ويوجد سيرفر رئيسي عليه Load Balancer يقوم بتوزيع الريكوست على السيرفرات بطريقة متوازية فيما بينهم بحيث لا يسبب ضغط على أى سيرفر من السيرفرات
  7. هناك شئ أسمه Topic فى الفاير بيز هو شئ يشبه الجروب بحيث تجعل كل المستخدمين يقومون بعمل subscribe لهذا ال Topic ويمكنك من خلال الباك إند إرسال نوتفكيشن لهذا ال Topic فلو إفترضنا أنه نريد أن نرسل لكل المستخدمين أن يوجد عرض جديد أو ماشابه ذلك .. من خلال التطبيق نجعل المستخدمين يقومون بعمل subscribe ل Topic يسمى offers مثلا ... ومن خلال البوست مان أو الباك إند الخاصه بك يمكنك إرسال إشعار لهذا ال Topic
  8. الفكرة أخي الكريم أن الأوبشن الجديدة لن يتم الإستماع إليها لأن ال DOM تم تحميلها بالفعل ولذلك يجب علينا أن نجعل الجافا إسكربت تقوم بالإستماع لأي شئ جديد عن طريق أكتر من حل : $(document).delegate('#section', 'change', function (e) { // write your code here }); أو عن طريق دالة ال on $(document).on('change', '#section', function() { // write your code here });
  9. عدل هذا السطر ليكون بالشكل التالي $emails = $user->emails()->where(['verified' => true])->get();
  10. قم بتحميل تلك البكج composer require doctrine/dbal
  11. قم بتفعيل الأكستنشن الخاصه ب openssl من ال php.ini extension=openssl قم بالبحث عن هذا السطر واخذف من أول السطر السيمي كولن ثم قم بإعاده تشغيل السيرفر
  12. هل تقصدين التعديل عليه من الجيت هاب مباشرة أم من على جهازك ثم ترفعين على الجيت هاب
  13. الفكرة أخي الكريم أننا سنقوم بقراءة الملف الحالي وإضافة سطر سطر إلى ملف جديد ولكن قبل أن نضع السطر فى الملف الجديد سنقوم بعمل شرط لكي نختبر هل هذا السطر نريد حذفه أم لا مثال : import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; class Solution { public static void main(String[] args) throws FileNotFoundException, IOException{ File inputFile = new File("myFile.txt"); File tempFile = new File("myTempFile.txt"); BufferedReader reader = new BufferedReader(new FileReader(inputFile)); BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); String lineToRemove = "bbb"; String currentLine; while((currentLine = reader.readLine()) != null) { String trimmedLine = currentLine.trim(); if(trimmedLine.equals(lineToRemove)) continue; writer.write(currentLine + System.getProperty("line.separator")); } writer.close(); reader.close(); boolean successful = tempFile.renameTo(inputFile); System.out.println(successful); } } لو تلاحظ أخي الكريم هنا File inputFile = new File("myFile.txt"); // هذا الملف الأصلي لدينا File tempFile = new File("myTempFile.txt"); // هذا ملف جديد نقوم بإنشاؤه هذا السطر نقوم من خلاله بالقراءه من الملف الأول BufferedReader reader = new BufferedReader(new FileReader(inputFile)); وهذا السطر نقوم من خلاله للكتابة فى الملف الجديد BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); وهذا السطر نقوم من خلاله بتحديد نص السطر الذي نريد أن نحذفه String lineToRemove = "bbb"; ثم أخيراً نقوم بعمل while loop لكي نقرأ الأسطر الخاصة بالملف الأول while((currentLine = reader.readLine()) != null) { String trimmedLine = currentLine.trim(); if(trimmedLine.equals(lineToRemove)) continue; // هنا نقوم بعمل الشرط الخاص بنا فإذا وجدنا السطر يساوي السطر الذي نريد حذفه فلا نقوم بإضافته فى الملف الجديد writer.write(currentLine + System.getProperty("line.separator")); } وأخر أمر نقوم بعمل rename لإسم الفايل عن طريق boolean successful = tempFile.renameTo(inputFile);
  14. ال GraphQl هي وجه أخر للتعامل مع ال api فى الباك فالطريقة التقليدية هي إذا أردنا التعامل مع ال api لجلب بيانات المنتجات التى لدينا فى السيرفر فسنقوم بعمل استعلام عن طريق رابط معين مثل https://www.example.com/api/products ومثلا إذا أردنا الإستعلام عن الأقسام الموجودة أيضاً سنقوم بعمل إستعلام عن طريق رابط معين مثل https://www.example.com/api/categories فلو تلاحظ أنه كلما إحتاجنا للإستعلام عن شئ نقوم بزيارة رابط معين معروف مسبقا عن طريق التنسيق بين فريق الباك أند وفريق الفرونت إند وهنا كانت المشكلة فلو إفترضنا أن فريق الفرونت إند يحتاج قيمة معينة تكون موجودة فى ال response الموجود من خلال ال api فى تلك الحالة سيضطر تيم الباك أند أن يقوم بعمل تعديل على الكود لكى تعمل ال api مثلما يريد تيم الفرونت إند مثال : لو لإفترضنا أنه لدينا جدول خاص بالمنتجات فى الباك إند به قيم كالتالي : 1 - id 2 - name 3 - description 4 - price 5 - cost_price ولدينا باك إند على الرابط التالي https://www.example.com/api/products والناتج الراجع منها هو : { "id" : 1, "name" : "product name", "description" : "product description" } المشكلة هنا لو إفترضنا أن تيم الفرونت إند يريد قيمة السعر أيضاً سيضطر تيم الباك إند للتعديل على ال api الخاصة ب https://www.example.com/api/products لجعل الناتج كالتالي : { "id" : 1, "name" : "product name", "description" : "product description", "price" : 10 } ومن هنا جاء فريق الفيس بوك بحل لتلك المشكلة عن طريق إختراع تقنية تسمى GraphQl أنة من خلال إند بوينت واحدة تستطيع أن تتحكم فى جلب البيانات التى تريدها ... وطبعا يوجد طريقة معينة لكتابة ال GraphQl وهي لها جانبان جانب خاص بالباك إند وجانب خاص بالفرونت إند أمثلة على طريقة الإستعلام عن المنتجات عن طريق ال GrapQl { products { name , description, }, } في هذا المثال نحن نقوم بالتحكم فيما نريد أن نستعلم عنه فمثلا نحن نطلب المنتجات وأيضا نتحكم فى البيانات التى نريدها فى المنتجات حيث نريد الاسماء والوصف فقط ويكمن أن نقوم بعملها كالتالي : { products { id , price, }, } نفس ال api ونفس الإند بوينت نستطيع أن نستعلم عن المنتجات ولكن نطلب حقول مختلفة وهذة هي الفكرة العامة من ال GraphQl. أما بالنسبة ل Gatsby فهو فريم ورك مبنى على تقنية ال react js لتساعدك فى عمل مواقع بطريقة سريعة ومنظمة أكثر ممكن أن تفكر فيها على أنها bootstrap بالنسبة ل css. وأخيراً strapi هوا نظام إدراة المحتوى CMS ولكن يختلف عن الورد بريس حيث أنه عبارة عن مشروع باك إند فقط ويتيح لك التعامل معه عن طريق Api خاصة به
  15. import { Dimensions, StyleSheet } from 'react-native' const { width, height } = Dimensions.get('window') const styles = StyleSheet.create({ myView: { width: width * 0.8, // 80% of screen's width height: height * 0.2 // 20% of screen's height } }) يمكننا معرفة الطول والعرض الخاص بالخاص التابع لنا عن طريق Dimensions.get('window') ثم عن طريقها نستتطيع أن نضع طول وعرض مناسبين لأي كومبوننت لدينا