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

Waleed Alfakiat

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

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

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

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

    2

كل منشورات العضو Waleed Alfakiat

  1. عند استخدام Route::resource لتعريف الموجهات يتم تعريفها لتستقبل GET, POST, PUT, DELETE https://i.suar.me/NG96V/l فبهذا الشكل لا يمكن تعريف التوجيه مرة أخرى بهذا الشكل Route::post("/cities",[citiesController::class,"store"]); وإنّما نكتفي بـ Route::resource فقط Route::resource('/cities',citiesController::class);
  2. يوجد العديد من مزودي خدمات الاستضافة المجانية ولكن لكل منها مزاياها وعيوبها: ففي 000webhost يتيح لك موقع واحد مجاني وحجم محدود لرفع الملفات. www.000webhost.com ولكن في Ebehost يتيح لك دومين فرعي مجاني ومساحة غير محددة بالإضافة لعدة ميزات يمكنك استخدامها مثل Softaculous ولوحة تحكم cPanel www.ebehost.com
  3. تتكون لغات البرمجة من عدة تعليمات برمجية يتم تنفيذها خلال عمل البرنامج ويجب الفصل بين هذه التعليمات بإشارة يفهمها المُترجم الخاص بالغة البرمجة فمثلًا في لغات البرمجة PHP, Java, C++ نستخدم الفاصلة المنقوطة : print(""); print("") ^ للفصل بين التعليمات البرمجية. وفي لغة Python يتم كتابة كل أمر في سطر منفصل, هكذا: print("") print("") ولأنّ لغة PHP تفصل بين التعليمات بفاصلة منقوطة ( ; ) وجب الفصل بين التعليمات في السطر رقم 30 والسطر رقم 34 بفاصلة منقوطة
  4. تُقسم برمجة الويب إلى قسمين: تصميم واجهات المستخدم برمجة Back-end أنت الآن تقف في القسم الأول وهو تصميم واجهات المستخدم, حيث يحتوي هذا القسم على الصور والأيقونات والنصوص التي يشاهدها المستخدم, وتقوم بعرضها بشكل ثابت ومباشر. للإنتقال إلى القسم الثاني, تحتاج إلى لغة برمجة لإنعاش روح الموقع, ومن هذه اللغات (PHP, C#, Java) تحيث تقوم لغات البرمجة على التحكم بالمدخلات من المستخدم وعرض نتائج على شكل تصاميم ونصوص سَبَقَ وأن تم تصميمها في المرحلة الأولى
  5. نقوم بالوصول لملفات blade باستدعائها باسم المسار كاملًا فعندما يكون الملف بداخل مجلد posts يكون الاستدعاء بالوصول إلى مجلد posts ثم اسم ملف blade المطلوب, هكذا: @extends('posts.layout') وكذلك الأمر ينطبق عندما يكون في مجلد آخر يتم استدعاؤه بالاعتماد على المجلد الخارجي, هكذا: @extends('component.layout')
  6. يمكنك الاطلاع على هذا الحل باستخدام Laravel حيث يمكنك تشغيل البرنامج والوصول إليه من الأجهزة الأخرى داخل الشبكة (Local Network) دون الحاجة لوجود استضافة خارجية
  7. بالإضافة لما قاله المدرب@عبود سمير: يظهر الخطأ بسبب عدم الوصول إلى الملف المحدد وذلك: إمّا أنّ الملف غير موجود أو أنّ مسار الملف خاطئ وللتأكد من مسار الملف نستخدم عدة طرق للكشف عنها 1. الطريقة الأولى: التأكد من صحة المسار النسبي والمسار المطلق فمثلًا لدينا هذه الملفات في موقع ما www.sample.com/ |- images/ | |--- image1.png | |--- image2.png | |--- image3.png | |- assest/ | |--- style.css | |--- comp.js | |- core/ | |--- core.php | |- index.php ونحن الآن في ملف core.php ونريد استدعاء الصورة image1.png, فكيف يتم استدعاؤها ؟ في المسار النسبي: يتم استدعاء مسار الصورة نسبةً للملف الذي نقف عليه, فيصبح مسار الاستدعاء هكذا: "../images/image1.png" وفي المسار المطلق: يكون الاستدعاء عن طريق مسار كاملًا بدءً من رابط الموقع وصولًا إلى الملف الهدف, فيصبح مسار الاستدعاء هكذا: "http://www.sample.com/images/image1.png" فيرجى التأكد من الطريقة المُتَّبعة في استدعاء المسار تحديدًا عند نقل الملفات من مكان لآخر 2. الطريقة الثانية: التأكد من إعدادات PHP قد يكون تضمين الملفات عن طريق URL في PHP متوقفًا ولتفعيل هذا الخيار, نقوم باستدعاء الدالة: ini_set("allow_url_include", "1") والخيار allow_url_include هو المسؤول عن إتاحة تضمين الملفات عن طريق URL أو أيقافها, لذلك نقوم بتفعيل هذا الخيار
  8. تتيح Laravel العمل إنشاء الجداول في قاعدة البيانات مع المرونة في تعديلها في وقت لاحق عن طريق التهجير مرة أخرى فعند القيام بإنشاء جدول نقوم بكتابة الأمر التالي: php artisan make:migration file_migration_name --create table_name ^^^^^^ حيث أنّ الأمر: --create يعني أن ملف التهجير الجديد يعمل على إنشاء جدول باسم "table_name" ماذا لو أردنا التعديل على جدول حالي ؟ ببساطة: نقوم بتعديل الأمر من (--create) إلى (--table) وتمرير اسم الجدول الحالي المُراد تعديله فيصبح هكذا: php artisan make:migration file_migration_name --table table_name ^^^^^ وبداخل الملف نضع التعديلات public function up() { Schema::table('posts', function($table) { $table->integer('new_col'); ... }); } ونضع كود rollback في الدالة down وهي الجزئية الخاصة بحذف الحقل عند تنفيذ أمر التراجع public function down() { Schema::table('posts', function($table) { $table->dropColumn('new_col'); }); } ولكن بعد تنفيذ أمر التهجير php artisan migrate لا يمكن التعديل على الملف السابق, بل نقوم بإنشاء ملف تهجير جديد ونكرر ما فعلناه
  9. يمكنك إضافة زر مشاركة عن طريق التوجيه لتطبيق واتس آب وإرفاق النص whatsapp://send?text=النص فيصبح الرابط كالآتي: <a href="whatsapp://send?text=النص">WhatsApp</a>
  10. انت تقوم بوضع ملف css في الملف الرئيسي حتى تستطيع الوصول إليهم بشكل مباشر
  11. نقوم بانشاء ملف css في public باسم styles.css واستدعائه في view <link rel="stylesheet" href="styles.css">
  12. يشير الرمز 5xx عادة إلى أخطاء البرنامج, ومن هذه الأخطاء: إصدار php في الخادم, غير متوافق مع إصدار php الذي كُتب به البرنامج فمثلًا: تم برمجة النظام باستخدام اصدار php7 ورفعه على الخادم الذي يعمل على إصدار php5 وفي هذه الحالة: يجب تغيير اصدار الخادم وتغييره لاصدار 7 أخطاء في ترجمة الكود المصدري: في بعض الحالات يقوم المترجم الموجود في الجهاز بالتعرف على رموز php مثل <? // البرنامج هنا ?> ولكن المترجم الموجود في الاستضافة لا يتعرف على رموز php إلا هكذا <?php // البرنامج هنا ?> هذه من أبرز المشاكل التي كانت سبب في ظهور الخطأ 5xx
  13. عند استخدام الدالة get() للحصول على البيانات, يتم ارجاع collection تحتوي كائنات لجميع السجلات التي تم استخراجها من قاعدة البيانات ولقراءة هذه الكائنات نقوم بعمل تكرار للوصول للبيانات, مثال: @foreach ($collection as $object) {{ $object->title }} @endforeach أو الحصول على قيمة عن طريق index محدد هكذا: {{ $collection[0]->title }} أو الحصول على أول كائن: {{ $collection->first()->title }} ولكن عند استعمال find() أو first() Page::find('page', 'about-me'); يتم ارجاع كائن واحد فقط وعندها يمكنك قراءة محتوياته بشكل مباشر {{ $page->title }}
  14. عند تنفيذ أمر تهجير البيانات php artisan migrate نقوم بإضافة الأمر التالي إليها: --pretend وهذا المسؤول عن طباعة أوامر SQL في terminal التي تم تنفيذها لتهجير البيانات إلى قاعدة البيانات فيصبح الأمر هكذا: php artisan migrate --pretend والنتيجة تظهر في terminal: Migration table created successfully. CreateUsersTable: create table "users" … CreateUsersTable: create unique index … CreatePasswordResetsTable: create table "password_resets" … CreatePasswordResetsTable: create index password_resets_email_index … CreatePasswordResetsTable: create index password_resets_token_index … ولحفظ النتيجة في ملف migrate.sql نقوم بتوجيه المخرجات من terminal إلى الملف المحدد بإضافة الأمر: > migrate.sql ولكن يتم حفظ المخرجات SQL مع زوائد إضافية مثل ("CreateUsersTable: " و "CreatePasswordResetsTable: ") كما ظهرت في Terminal ولفلترة النتائج من هذه الزوائد نقوم باستدعاء الأمر: --no-ansi المسؤول عن عدم طباعة هذه الزوائد عن أوامر SQL بذلك يكون لدينا المخرجات عبارة عن أوامر SQL فقط ويتم حفظها في ملف migrate.sql من خلال الأمر: php artisan migrate --pretend --no-ansi > migrate.sql
  15. يظهر هذا الخطأ بسبب أن القيمة null وهذا لا يُطبّق عليها الشرط string لأنّ null تعني بأنّه لا توجد قيمة أساسًا, وفي حالة عدم وجود قيمة فلا يمكننا اعتبارها string فيحصل الخطأ عند التحقق من صحتها لذلك يجب وضع قاعدة: 'nullable' في التحقق ليصبح هكذا: 'firstName' => 'string|max:255|nullable', 'lastName' => 'string|max:255|nullable' وبهذا يتم قبول القيمة إذا كانت خالية
  16. بما أنّ البيانات على شكل JSON يجب أولًا قراءة محتوياتها لتتمكن Laravel من التعامل معها وذلك باستخدام الدالة: json_decode($data); التي تقوم بتحويل شكل البيانات من JSON إلى مصفوفة بعد ذلك نمررها إلى validate ونطبق القواعد على البيانات use Validator; public function store(Request $request) { $data = json_decode($request->payload, true); $rules = [ 'name' => 'digits:8', 'age' => 'digits:8' ]; $validator = Validator::make($data, $rules); if ($validator->passes()) { // الاجراءات عند عدم صحة البيانات } else { // الاجراءات عند نجاح عملية التحقق } } ولكن يجب أن نتذكر بأن القاعدة digits تقوم بالتحقق من أن القيم عبارة عن أرقام, ويجب ان نمرر لها عدد الخانات المسموح بها فتصبح هكذا: digits:8
  17. تحتاج إلى تحديد اصدار React الخاص بـ react-hot-dom في ملف الحزم package "@hot-loader/react-dom": "{الاصدار الحالي}", وبعد ذلك تقوم بإضافته في webpack config alias: { 'react-dom': '@hot-loader/react-dom' } حتى يتم الحصول على الاصدارات المناسبة للمكتبات بما يتناسب مع اصدار React الخاص بك
  18. تتيح الدالة validate تخصيص رسائل محددة فتقوم باستقبال ثلاثة متغيرات هكذا: $this->validate($request, $rules, $customMessages); $request: وهو الطلب الذي يحتوي على القيم المراد التحقق من صحتها $rules: وتحتوي على مجموعة القواعد التي سيتم تطبيقها على المدخلات $customMessages: وهو اختياري, نقوم بتمرير الرسائل المخصصة للأخطاء مثل: 'required' =>' الحقل :attribute مطلوب.' حيث أنّ :attribute يتم تعويضها تلقائيًا باسم الحقل فيصبح البرنامج هكذا: $rules = [ 'name' => 'required', 'email' => 'required|email', 'message' => 'required|max:250', ]; $customMessages = [ 'required' => ' الحقل :attribute مطلوب.', ]; $this->validate($request, $rules, $customMessages);
  19. يمكنك استخدام Middleware يتحقق من صلاحية المستخدم والتحكم بإعادة التوجيه وتطبيقه على routes التي تريدها بدايةً نقوم بإنشاء middleware باسم AdminMiddleware عن طريق الأمر: php artisan make:middleware AdminMiddleware ^^^^^^^^^^^^^^^ اسم ملف middleware وبداخله نقوم بالتحقق من امتلاك المستخدم لصلاحية admin والسماح له بالمرور, وغير ذلك نقوم بإعادة توجيهه إلى الخطأ 403 namespace App\Http\Middleware; use Auth; ... class AdminMiddleware { public function handle($request, Closure $next){ if (Auth::user()->type !== "admin") { // إن كان المستخدم لا غير مصرح له بالدخول abort(403, 'Unauthorized action.'); // توليد الخطأ 403 } return $next($request); // غير ذلك نقوم بالسماح له بالمرور } } ولا ننسى استدعاء use Auth; للوصول لبيانات المستخدم بعد ذلك: نقوم بتسجيل AdminMiddleware ضمن قائمة الـ middleware لنتمكن من استدعائه مباشرة عن طريق الاسم, وذلك في ملف Kernel.php بداخل المسار: app\Http\Kernel.php: نبحث عن $routeMiddleware ونضيف بداخله مسار AdminMiddleware والاسم المستعار الذي سنستخدمه في routes ... protected $routeMiddleware = [ ... 'admin' => 'App\Http\Middleware\AdminMiddleware', ]; ... وبهذا نكون قد سجلنا AdminMiddleware باسم admin ونقوم بتطبيقه على routes المحددة كمجموعة Route::group(['middleware' => ['auth', 'admin']], function() { Route::get('report','ReportController@index'); Route::get('report/create', array('as'=>'report.create', 'uses'=>'ReportController@create')); ... });
  20. ويمكنك أيضًا التحقق من حجم الملفات المسموح رفعها عن طريق إعدادات php من خلال ملف php.ini (يمكنك البحث عنه من خلال اداة البحث في شريط المهام) وتحديد حجم الملف في خيار upload_max_filesize ... ; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize = 2M // حجم الملف المسموح رفع ...
  21. بدايةً قم بإنشاء ملف تهجير بيانات لتعديل الجدول الحالي ونسميه مثلًا "update_foreign" عن طريق الأمر التالي: php artisan make:migration update_foreign --table table_one حيث أنّ: وفي داخل الملف نقوم بحذف قيد foreign key ومن ثمّ إضافة القيود الجديدة على الحقل كما هو مطلوب: public function up() { Schema::table('table_one', function (Blueprint $table) { $table->dropForeign(['table_two_id']); // حذف القيد السابق $table->foreign('table_two_id') // إضافة القيد الجديد ->references('id') ->on('table_two') ->onDelete('cascade'); }); } بعد ذلك نقوم بتهجير البيانات من خلال الأمر: php artisan migrate
  22. تدعم Laravel معرفة عناوين البريد الإلكتروني التي فشلت إرسال رسائل لهم عن طريق الدالة failures(); التابعة للكائن Mail فيتم استدعاؤها بعد إرسال البريد الإلكتروني هكذا: public function sendMail(Request $request) { $data = $request->all(); $messageBody = $this->getMessageBody($data); Mail::raw($messageBody, function ($message) { ... }); if (Mail::failures()) { // التحقق من نجاح العملية // الاجراءات عند فشل إرسال الرسالة } return redirect()->back(); }
  23. يقوم Laravel بتخزين نسخة من ملفات blade التي تمت ترجمتها إلى PHP مؤقتًا لتسريع عمليات التنفيذ وفي كل مرة يتم التعديل على ملف Blade قد لا يتم تحديث النسخة المترجمة المؤقتة لذلك يجب حذف الملفات المؤقتة حتى يتم عرض آخر تحديث من ملفات Blade مسار الملفات المؤقتة: storage/framework/views
  24. قد تحدث أخطاء أثناء الاستعلام من قواعد البيانات ومنها: لا توجد بيانات مطابقة للاستعلام خطأ بالاتصال بقاعدة البيانات, وما إلى ذلك ولا يمكن قراءة البيانات عند حدوث مثل هذه الأخطاء: لذلك يجب التأكد من أنّ قيمة $result ليست false, وبذلك يمكن قراءة نتيجة الاستعلام $username = $_POST['username']; $password = $_POST['password']; $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE $username"); if($result === FALSE) { die(mysql_error()); // اجراءات عند حدوث مشاكل في الاستعلام } while($row = mysql_fetch_array($result)) { echo $row['FirstName']; }
  25. يمكنك استدعاء الدالة ->orderBy() أكثر من مرة كما تشاء لترتيب السجلات, هكذا: User::orderBy('name', 'DESC') ->orderBy('email', 'ASC') ->get(); وفي كل مرة تحدد حقل معين وتحدد معه طريقة الترتيب (تنازلي / تصاعدي) وتكون مكافئة لعمل هذا الأمر: SELECT * FROM `users` ORDER BY `name` DESC, `email` ASC
×
×
  • أضف...