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

يوسف احمد9

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

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

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

كل منشورات العضو يوسف احمد9

  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. قم بتفعيل الأكستنشن الخاصه ب openssl من ال php.ini extension=openssl قم بالبحث عن هذا السطر واخذف من أول السطر السيمي كولن ثم قم بإعاده تشغيل السيرفر
  11. هل تقصدين التعديل عليه من الجيت هاب مباشرة أم من على جهازك ثم ترفعين على الجيت هاب
  12. الفكرة أخي الكريم أننا سنقوم بقراءة الملف الحالي وإضافة سطر سطر إلى ملف جديد ولكن قبل أن نضع السطر فى الملف الجديد سنقوم بعمل شرط لكي نختبر هل هذا السطر نريد حذفه أم لا مثال : 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);
  13. ال 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 خاصة به
  14. 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') ثم عن طريقها نستتطيع أن نضع طول وعرض مناسبين لأي كومبوننت لدينا
  15. هناك نوعين من التست في لارافيل إما unit test او integration test ال unit test نقوم بإختبار كل فنكشن على حده وبطريقه منفصله للتأكد هل تعمل بشكل صحيح أم لا أما بالنسبه لل integration test فأنت تقوم يعمل استورى كامله للتست مثال : اليوزر قام بعمل تسجيل دخول ثم ذهب إلي صفحه البروفايل وعدل بياناته تلك الطريقه تسمي integration test وهذا بيتم عن طريق Browser tests في لارافيل
  16. هذه مشكلة موجودة بالفعل فى دالة ال toFixed انها فى بعض الأحيان تقرب الرقم لأقرب رقم صحيح وأحيانا لا ويوجد بعض الحلول لذلك أولا يمكنك الإعتماد على مكاتب خارجية مثل مكتبة big.js وستقوم المكتبة بحساب القيم بطريقة صحيحة والحل الأخر يمكن أن نقوم به كالتالى : function toFixed(n, d) { const tenToD = Math.pow(10, d); return (Math.round(n * tenToD) / tenToD).toFixed(d); } سنقوم بعمل الدالة الخاصة بنا لكى تعمل الدالة بطريقة صحيحة أولا : سنقوم بضرب الرقم 10 فى نفسه بناءا على عدد الأرقام التى نريد التقريب إليها بعد العلامة العشرية لو افترضنا الرقم سيكون 6.35 ونريد التقريب لرقم واحد بعد العلامة العشرية const tenToD = Math.pow(10, d); // tenToD = Math.pow(10, 1) = 10 * 1 = 10 إذا كنا نريد التقريب لأقرب رقمين بعد العلامة سنقوم بها كالتالى const tenToD = Math.pow(10, d); // tenToD = Math.pow(10, 2) = 10 * 10 = 100 ولكن فى تلك الحالة سنقوم بالتقريب لأقرب رقم عشرى const tenToD = Math.pow(10, d); // tenToD = Math.pow(10, 1) = 10 ومن ثم نقوم بالتقريب لأقرب رقم صحيح عن طريق إستخدام الدالة Math.round كالتالى Math.round(n * tenToD) // n * tenToD = 6.35 * 10 = 63.5 // Math.round(63.5) = 64 ومن ثم نقوم بقسمة الناتج على عشرة Math.round(n * tenToD) / tenToD // n * tenToD = 6.35 * 10 = 63.5 // Math.round(63.5) = 64 // 64 / 10 = 6.4 وأخيرا نستخدم الدالة toFixed لحساب الرقم النهائي : (Math.round(n * tenToD) / tenToD).toFixed(d) // (Math.round(63.5) / 10).toFixed(d) // (Math.round(63.5) / 10) = 6.4 // 6.4.toFixed(1) = 6.4
  17. جرب أخي أيضاً أن تضع ال topic id داخل سينجل كود هكذا : $sql = "SELECT * FROM conversation WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or(user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = '$topic_id'";
  18. جرب أخي أن تضع سينجل كوت قبل المتغير هكذا وتأكد من القيم $sql = "SELECT * FROM conversations WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or (user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";
  19. <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "xmmp-chat"; $topic_id= 325; $user_Received_id=1; $user_send_id=2; // Create connection $con = new mysqli($servername, $username, $password, $dbname); // Check connection if ($con->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT * FROM conversations WHERE (user_Received_id=$user_Received_id AND user_send_id=$user_send_id) or (user_Received_id=$user_send_id AND user_send_id=$user_Received_id) and topic_id = $topic_id"; $stmt = $con->prepare($sql); //$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id); $stmt->execute(); $result = $stmt->get_result(); //$result = $con->query($sql); if ($result) { $data = []; while ($row = $result->fetch_assoc()) { $data[] = $row; } echo "<pre>"; print_r($data); } ?> جرب هذا الكود أخي
  20. <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "xmmp-chat"; // Create connection $con = new mysqli($servername, $username, $password, $dbname); // Check connection if ($con->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT * FROM conversations WHERE (user_Received_id=1 AND user_send_id=2) or (user_Received_id=2 AND user_send_id=1) and topic_id = 325 "; $stmt = $con->prepare($sql); //$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id); $stmt->execute(); $result = $stmt->get_result(); //$result = $con->query($sql); if ($result) { $data = []; while ($row = $result->fetch_assoc()) { $data[] = $row; } echo "<pre>"; print_r($data); } ?> أنظر أخى لهذا الكود وتلك الصورة لرؤية الناتج من هذا الكود
  21. تلك الكويري ستقوم بإرجاع الداتا فقط من طريق واحد وهي فى حالة user_Received_id = 2 و user_send_id = 1 ولذلك يجب أن نعدل الكويري SELECT * FROM conversations WHERE (user_Received_id=1 AND user_send_id=2) or (user_Received_id=2 AND user_send_id=1) and topic_id = ?
  22. المشكلة موجودة فى دالة ال type يجب أن نحدد ال return data type public function type(): Type { return GraphQL::type('Item'); } لا تنسا أن تقوم بعمل إمبورت للكلاس الخاصة بال Type use GraphQL\Type\Definition\Type; هناك حل أخر وهوا كالتالى : use Rebing\GraphQL\Support\Facades\GraphQL; use GraphQL\Type\Definition\Type; public function type(): Type { return Type::nonNull(Type::listOf(Type::nonNull(GraphQL::type('Item')))); }
  23. مبرمج الفلاتر ليس بحاجة أن يعرف داتا بيز لأنه غالباً سيتعامل مع api والباك أند هو من سيتعامل مع الداتا بيز ولكن في بعض الأحيان مبرمجى الموبايل يحتاجون للتعامل مع sqllite database كنوع من انواع الكاش فى الموبايل
  24. اخى الكريم داله ال get تقوم بإرجاع list of collections لذلك اذا اردت ان تقوم بتعديل collection_name الذى يساوى clients الى clients_avatar لديك اكثر من حل اول حل وهوا $data = Media::where(['model_id' => $id, 'collection_name' => 'clients'])->get(); foreach($data as $media){ $media->update([ 'collection_name' => 'clients_avatar', ]); } والحل الاخر هوا ان تسترجع قيمة واحده فقط عن طريق دالة ال first $media = Media::where(['model_id' => $id, 'collection_name' => 'clients'])->first(); if($media){ $media->update([ 'collection_name' => 'clients_avatar', ]); }
×
×
  • أضف...