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

سمير عبود

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

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

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

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

    34

كل منشورات العضو سمير عبود

  1. عند إنشائك نُسخة من الصنف UploadedFile قم بتمرير القيمة true لآخر وسيط بهذا الشكل و هذا الوسيط هو وسيط بولياني يأخذ true إن كانت البيئة هي بيئة إختبارية و القيمة الإفتراضية له هي false. $file = new UploadedFile($path, $name, filesize($path), 'image/png', null, true); ^^^^ و هذا مثال يوضح الآلية بإعتبار وجود ملف صورة بالإسم test.png بداخل مجلد tests/stubs: <?php class UploadTest extends TestCase { public function test_upload_works() { $stub = __DIR__.'/stubs/test.png'; $name = str_random(8).'.png'; $path = sys_get_temp_dir().'/'.$name; copy($stub, $path); $file = new UploadedFile($path, $name, filesize($path), 'image/png', null, true); $response = $this->call('POST', '/upload', [], [], ['photo' => $file], ['Accept' => 'application/json']); $this->assertResponseOk(); $content = json_decode($response->getContent()); $this->assertObjectHasAttribute('name', $content); $uploaded = 'uploads'.DIRECTORY_SEPARATOR.$content->name; $this->assertFileExists(public_path($uploaded)); @unlink($uploaded); } } بإمكانك أيضاً النظر إلى التابع fake فهو يُساعد كثيراً في عملية إختبار رفع الملفات مثال: <?php class UploadTest extends TestCase { public function test_upload_works() { $this->post( action('AttachmentController@store'), ['file' => UploadedFile::fake()->image('file.png', 600, 600)] ); /** @var \App\Attachment $attachment */ $this->assertNotNull($attachment = Attachment::query()->first()); $this->assertFileExists($attachment->path()); @unlink($attachment->path()); } }
  2. الفرق بين input و raw_input هو أن raw_input غير موجودة في الإصدار 3.x بينما input موجودة. في الإصدارات 2.x كانت raw_input موجودة و تم إعادة تسميتها إلى input في الإصدارات 3.x، بينما تم حذف الدالة input القديمة. ما يعني أن raw_input القديمة و input الجديدة هما نفس الشيء بينما input القديمة كانت تقرأ الإدخال و تحاول تفسيره او معالجته كأنه تعليمة برمجية. يُمكن محاكاة عمل الدالة input القديمة بإستخدام input بالإضافة إلى الدالة eval: # Python 3 def old_input(str): return eval(input(str)) ex1 = input("type 1: "); # 5 + 6 ex2 = old_input('type 2: ') # 5 + 6 print(ex1) # 5 + 6 print(ex2) # 11
  3. ليس لدي فكرة حول هذا الأمر لقد لاحظت ذلك عند التجربة لكن اعتقدت أنك تفعل ذلك عن عمد، عُموما بإمكانك معرفة السبب بتتبع العملية اي ماذا يحدث عند عرض الصفحة و ماذا يحدث عند وضع علامة صح و تحاول إيجاد السبب.
  4. نعم لقد جربته بالكامل و هو يعمل بشكل ممتاز الآن، عمل جيد إستطعت أن تُدخل أفكارك على التطبيق أنصحك بالمواصلة في ذلك و الإستمرار في مسارات الدورة و ستتعلم الكثير من الأشياء التي ستبني لديك أشياء أخرى. بالتوفيق.
  5. هناك خطأ ما يحدث عند العرض. بإمكانك تفعيل خاصية APP_DEBUG في ملف env. لعرض تفاصيل الخطأ الذي يحدث حتى يُمكنك معالجته. @علي العبدالله لاحظ أن الخطأ الآن يُخبرك: Class "App\Models\day" not found تأكد من أن إسم الملف و الكلاس Day و أعد تسميته في تعريف العلاقة في النموذج Habit لأنه كما أعتقد أن نظام ويندوز لا يأخذ إعتبار لل capital و small في المسارات بينما الأمر يختلف في نظام تشغيل آخر ك لينوكس مثلاً.
  6. في وسم head يُمكنك إضافتها و تُسمى favicon: <link rel="icon" type="image/png" href="http://example.com/myicon.png"> حيث من خلال الخاصية href تقومين بوضع مسارها و من خلال الخاصية type تُحددين نوعها.
  7. قيمة الإشتراك في أحد دورات الأكاديمية هي 160$ لكل دورة يُمكنك الوصول لهذه المعلومات من خلال صفحة الدورة حيث ستجد كافة المعلومات و الأجوبة الخاصة بالأسئلة الشائعة.
  8. هذه الدالة update مسؤولة عن عملية تعديل و الخطأ المُرفق ناتج عن عملية insert أي من المفروض تكون الدالة store !!
  9. أقصد الأسطر البرمجية التي كتبتها في الدالة بعد التحقق من المدخلات، الأسطر المسؤولة عن إنشاء السجل.
  10. بعد جزء التحقق من المُدخلات هناك جزء تقوم فيه بإنشاء السجل في جدول قاعدة البيانات هل بإمكانك عرض هذا الجزء علينا أو بإمكانك عرض كافة التابع المسؤول عن العملية.
  11. الخطأ المُرفق لا يعني أنه لا يتم التحقق من الحقل important أعتقد أن الأمر تجاوز التحقق وتم التأكد من وجود الحقل important في الطلب. الخطأ المُرفق يعني عدم وجود قيمة للحقل important أثناء عملية تخزين السجل في قاعدة البيانات. هل يُمكنك التأكد من هذا الأمر أو عرض الجزء الخاص بعملية التخزين لنا لكي نُساعدك.
  12. لا أعتقد أن الورقة و القلم ضرورية الأفضل أن تفهم و تُطبق جيداً و هو كافي بشكل كبير أما عندما تريد أن تتذكر شيئاً ما فستجده بسهولة فهناك عدة مواقع بها توثيق لمعظم لغات البرمجة مع أمثلة بسيطة من خلالها يُمكن إسترجاع المعلومة مثل موسوعة حسوب باللغة العربية و هناك مواقع مثل w3schools بالإنجليزية و غيرها. أما إن كنت تُحبذ فكرة الورقة و القلم و ترتاح لها فلا مانع في إستخدامها فلكل شخص طريقته في فهم الأشياء و في التعلم ككل.
  13. نعم تحتاج إلى بعض الأساسيات في اللغات و التقنيات التي تُستخدم في الواجهة الأمامية قبل الخوض في تعلم مسار بناء الواجهات الخلفية لتطبيقات الويب: أساسيات HTML أساسيات CSS أساسيات JavaScript سيكون من الأفضل توظيفهم في تطبيق أو مشروع واحد ثم تنتقل إلى تعلم أساسيات اللغة و التقنيات التي تريد تعلمها في مسار الواجهات الخلفية.
  14. محددات الوصول في جافا هي ثلاثة انواع public، protected، private بالعربية: عام، محمي، خاص، و هي كلمات محجوزة في لغة جافا نستعملها قبل خصائص او وظائف الصنف او الكلاس و هذه الكلمات تُحدد طريقة و تتحكم في الوصول إلى هذه الخصائص او الوظائف. الخاص إذا ما وضعنا الكلمة private قبل الخاصية او الوظيفة سنتمكن من الوصول إليها من داخل الكلاس فقط المحمي إذا ما وضعنا الكلمة protected قبل الخاصية او الوظيفة سنتمكن من الوصول إليها من داخل الكلاس و من الكلاسات الأبناء و من الكلاسات التي تنتمي لنفس الحزمة (package) العام: إذا ما وضعنا الكلمة public قبل الخاصية او الوظيفة سنتمكن من الوصول إليها في أي مكان سواء داخل الكلاس في الكلاسات الأبناء أو في كلاسات أخرى. هناك نوع آخر في جافا غير مُستعمل كثيراً يُسمى الإفتراضي و هو إذا لم نحدد أي كلمة و هذا يعني أن الوصول إلى الخاصية أو الوظيفة يكون في إطار الحزمة ( package ) فقط.
  15. تم إجراء بعض التعديلات على sass في الإصدارات الأحدث يُمكنك حل المُشكل بالتعديل على ملف package.json في الإصدار الموافق للحزمة بهذا الشكل: "sass": "1.32.13", ثم إعادة تنفيذ: npm install && npm run dev
  16. من خلال المسار انت تُمرر مُتغيرين للدالة update احدهما habit و الثاني day لكن بما أن الدالة تستقبل معامل واحد day فإن قيمته هي قيمة المُتغير الأول في المسار يجب أن تكون الدالة بهذا الشكل: public function update(Request $request, $habit ,Day $day)
  17. هل بإمكانك توضيح ما تقوم به و ماهي المشكلة الآن.
  18. قم بتغيير الحقل من body للحقل الموافق لديك. أعتقد أنه task حسب رسالة الخطأ
  19. نعم بإمكانك بدل إنشاء مهمة واحدة إستخدام المعمل (factory) و إنشاء الكم الذي تريده،
  20. هناك عدة طرق للقيام بالأمر: في المتحكم ProjectController عند إنشائك للمشروع في التابع store تستقبل غرض المشروع في متغير و تُنشئ مهمة عامة لهذا المشروع و بهذا الشكل يُصبح عند إنشاء أي مشروع تُنشأ له مهمة عامة: <?php public function store(Request $request) { // ... $project = Project::create($data); $project->tasks()->create(['body' => "مهمة عامة"]); // .. } في النموذج Project تُعيد تعريف الدالة boot ثم تقوم بالتسمع على حدث created بهذا الشكل: <?php protected static function boot() { parent::boot(); static::created(function (Project $project) { $project->tasks()->create(['body' => "مهمة عامة"]); }); } الآن عند إنشاء مشروع تلقائياً يتم إنشاء مهمة له و ستأخذ المهمة في الحقل body مهمة عامة. يُمكن عمل الموضوع بإستعمال المُراقبات (observers)، يُمكن أيضاً عمل الأمر بإستعمال الأحداث (events) و المُتسمعات (listeners) أدعوك للإطلاع على هاذين الأمر و عمل ما تريد القيام به بإستعمال هاتين الطريقتين للتوسع أكثر و التمرن.
  21. بعد إنشاء معمل (factory) لكل من النموذجين Project و Task و ملء الحقول الأساسية بالإضافة إلى عمل العلاقات بين النموذجين بإمكانك القيام بالتالي: Project::factory() ->has(Task::factory()->count(10)) ->count(5) ->create(); في الملف DatabaseSeeder مع إستدعاء الكلاسات في الأعلى. ثم تنفيذ امر البذر الذي سيُنشئ 5 مشاريع و لكل مشروع 10 مهمات.
  22. السبب أن 10.111 هو عدد عشري في هيئة سلسلة نصية و ليس عدد صحيح فلو كان "10" يُمكنك إستخدام int مباشرة: x = "10" print(int(x)) # 10 بما أنه عشري يُمكنك إستخدام float لتحويله من نص إلى float ثم بإمكانك أخذ العدد الصحيح منه: x = "10.111 " print(int(float(x))) # 10 او إستخدام دوال math بالشكل الذي تريد مثال: import math x = "5.6" print(math.floor(float(x))) # 5 print(math.ceil(float(x))) # 6
  23. الخطأ 500 هو خطأ عام فالأفضل أن تٌفعل وضع التطوير و التصحيح حتى تظهر الأخطاء الفعلية التي تُسبب المُشكلة من خلال APP_DEBUG=true في ملف env. تحتاج إلى إستيراد كلاس File الذي تستخدمه تأكد من ذلك: use Illuminate\Support\Facades\File; إن كان profiles عبارة عن مجلد فينقصك / في مسار الملف: if(File::exists(public_path('images/profiles/' . $fileName))){ File::delete(public_path('images/profiles/' . $fileName)); } قد تكون المُشكلة مُشكلة أذونات على الملفات تأكد من إعطائك الأذونات الصحيحة للملفات. إن كنت قد غيرت مكان مجلد public أو قمت بحذفه لسبب ما على الخادم تحتاج إلى تغيير الدالة public_path حتى تقوم بإرجاع المسار الصحيح كما يلي في الملف index.php: $app->bind('path.public', function() { return __DIR__; });
  24. السبب في المُشكلة أنك لا تقوم بإرجاع النتائج من الإستعلام فحالياً المُتغير res يحمل نُسخة من باني الإستعلامات فقط ( Query Builder ) و لا يحتوي على نتيجة ذلك الإستعلام لجلب النتائج إستخدم التابع get بالشكل التالي: $res = DB::table('book_author') ->join('books', 'books.id', '=', 'book_author.book_id') ->where('book_author.author_id', '=', $author_id) ->where('book_author.book_id', '=', $book_id) ->get(); حيث أن التابع get سيقوم بإرجاع collection ثم بإمكانك التحقق من وجود نتائج بالشكل التالي: if($res->isNotEmpty()){ return true; } else{ return false; }
  25. حالياً لا توفر الأكاديمية دورات او فيديوهات لتعلم لغة c++ لكن ما توفره هو محتوى نصي عبارة عن مقالات و دروس مكتوبة بشكل يُساعد في تعلم و فهم اللغة يُمكنك الإطلاع على هذه المقالات من خلال هذا الرابط: سلسلة ++c للمحترفين
×
×
  • أضف...