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

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. تُقسم برمجة الويب إلى قسمين:

    1. تصميم واجهات المستخدم
    2. برمجة Back-end

    أنت الآن تقف في القسم الأول وهو تصميم واجهات المستخدم, حيث يحتوي هذا القسم على الصور والأيقونات والنصوص التي يشاهدها المستخدم, وتقوم بعرضها بشكل ثابت ومباشر.

    للإنتقال إلى القسم الثاني, تحتاج إلى لغة برمجة لإنعاش روح الموقع, ومن هذه اللغات (PHP, C#, Java)

    تحيث تقوم لغات البرمجة على التحكم بالمدخلات من المستخدم وعرض نتائج على شكل تصاميم ونصوص سَبَقَ وأن تم تصميمها في المرحلة الأولى

     

  5. نقوم بالوصول لملفات blade باستدعائها باسم المسار كاملًا

    فعندما يكون الملف بداخل مجلد posts

    بتاريخ On 4/8/2021 at 05:00 قال معتز المشكلي:

    73.JPG

    يكون الاستدعاء بالوصول إلى مجلد posts ثم اسم ملف blade المطلوب, هكذا:

    @extends('posts.layout')

     

    وكذلك الأمر ينطبق عندما يكون في مجلد آخر

    بتاريخ On 4/8/2021 at 05:00 قال معتز المشكلي:

    71.JPG

    يتم استدعاؤه بالاعتماد على المجلد الخارجي, هكذا:

    @extends('component.layout')

     

  6. بتاريخ On 4/5/2021 at 00:01 قال عبود سمير:

    لاحظ كتابتك للكلمة Dashboard تأكد أن المُجلد إسمه Dashbaord و ليس Dashboard أعتقد أن هذا هو السبب و بالتالي يُصبح:

    بالإضافة لما قاله المدرب@عبود سمير:

    يظهر الخطأ

    بتاريخ On 4/5/2021 at 00:00 قال كمال محمودي:

    [ErrorException] require(D:\xampp\htdocs\app\vendor\composer/../../app/Helpers/Dashbaord/profitCalculation.php): failed to open stream: No such file or directory

    بسبب عدم الوصول إلى الملف المحدد وذلك:

    1. إمّا أنّ الملف غير موجود
    2. أو أنّ مسار الملف خاطئ

    وللتأكد من مسار الملف نستخدم عدة طرق للكشف عنها

    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 أو أيقافها, لذلك نقوم بتفعيل هذا الخيار

    • أعجبني 1
  7. تتيح 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

    لا يمكن التعديل على الملف السابق, بل نقوم بإنشاء ملف تهجير جديد ونكرر ما فعلناه

  8. يشير الرمز 5xx عادة إلى أخطاء البرنامج, ومن هذه الأخطاء:

    إصدار php في الخادم, غير متوافق مع إصدار php الذي كُتب به البرنامج

    فمثلًا: تم برمجة النظام باستخدام اصدار php7 ورفعه على الخادم الذي يعمل على إصدار php5

    وفي هذه الحالة: يجب تغيير اصدار الخادم وتغييره لاصدار 7

     

    أخطاء في ترجمة الكود المصدري:

    في بعض الحالات يقوم المترجم الموجود في الجهاز بالتعرف على رموز php مثل

    <? // البرنامج هنا ?>

    ولكن المترجم الموجود في الاستضافة لا يتعرف على رموز php إلا هكذا

    <?php // البرنامج هنا ?>

    هذه من أبرز المشاكل التي كانت سبب في ظهور الخطأ 5xx

  9. عند استخدام الدالة 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 }}

     

    • أعجبني 1
  10. عند تنفيذ أمر تهجير البيانات

    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

     

    • أعجبني 1
  11. يظهر هذا الخطأ بسبب أن القيمة null وهذا لا يُطبّق عليها الشرط string

    لأنّ null تعني بأنّه لا توجد قيمة أساسًا, وفي حالة عدم وجود قيمة فلا يمكننا اعتبارها string فيحصل الخطأ عند التحقق من صحتها

    لذلك يجب وضع قاعدة:

    'nullable'

    في التحقق ليصبح هكذا:

    'firstName' => 'string|max:255|nullable',
    'lastName' => 'string|max:255|nullable'

    وبهذا يتم قبول القيمة إذا كانت خالية

    • أعجبني 1
  12. بما أنّ البيانات على شكل 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

     

    • أعجبني 1
  13. تحتاج إلى تحديد اصدار React الخاص بـ react-hot-dom في ملف الحزم package

    "@hot-loader/react-dom": "{الاصدار الحالي}",

    وبعد ذلك تقوم بإضافته في webpack config

    alias: { 'react-dom': '@hot-loader/react-dom'  }

    حتى يتم الحصول على الاصدارات المناسبة للمكتبات بما يتناسب مع اصدار React الخاص بك

    • أعجبني 1
  14. تتيح الدالة 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);

     

    • أعجبني 1
  15. يمكنك استخدام 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'));
    	...
    });

     

    • أعجبني 1
  16. بتاريخ 9 ساعات قال عبود سمير:

    return [ ... 'temporary_file_upload' => [ ... 'rules' => 'file|mimes:png,jpg,pdf|max:102400', // (100MB max, and only pngs, jpegs, and pdfs.) ... ], ];

    ويمكنك أيضًا التحقق من حجم الملفات المسموح رفعها عن طريق إعدادات php

    من خلال ملف php.ini (يمكنك البحث عنه من خلال اداة البحث في شريط المهام)

    وتحديد حجم الملف في خيار upload_max_filesize

    ...
    ; Maximum allowed size for uploaded files.
    ; http://php.net/upload-max-filesize
    upload_max_filesize = 2M  // حجم الملف المسموح رفع
    ...

     

  17. بدايةً قم بإنشاء ملف تهجير بيانات لتعديل الجدول الحالي ونسميه مثلًا "update_foreign"

    عن طريق الأمر التالي:

    php artisan make:migration update_foreign --table table_one
    

    حيث أنّ:

    اقتباس

    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

     

    • أعجبني 1
  18. تدعم 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();
    }

     

    • أعجبني 1
  19. يقوم Laravel بتخزين نسخة من ملفات blade التي تمت ترجمتها إلى PHP مؤقتًا لتسريع عمليات التنفيذ

    وفي كل مرة يتم التعديل على ملف Blade قد لا يتم تحديث النسخة المترجمة المؤقتة

    لذلك يجب حذف الملفات المؤقتة حتى يتم عرض آخر تحديث من ملفات Blade

    مسار الملفات المؤقتة:

    storage/framework/views

     

    • أعجبني 1
  20. قد تحدث أخطاء أثناء الاستعلام من قواعد البيانات ومنها:

    • لا توجد بيانات مطابقة للاستعلام
    • خطأ بالاتصال بقاعدة البيانات, وما إلى ذلك

    ولا يمكن قراءة البيانات عند حدوث مثل هذه الأخطاء:

    بتاريخ 43 دقائق مضت قال Mohammad Yousef3:

    $row = mysql_fetch_array($result)

    لذلك يجب التأكد من أنّ قيمة $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'];
    }

     

    • أعجبني 1
  21. يمكنك استدعاء الدالة

    ->orderBy()

    أكثر من مرة كما تشاء لترتيب السجلات, هكذا:

    User::orderBy('name', 'DESC')
        ->orderBy('email', 'ASC')
        ->get();

    وفي كل مرة تحدد حقل معين وتحدد معه طريقة الترتيب (تنازلي / تصاعدي)

    وتكون مكافئة لعمل هذا الأمر:

    SELECT * FROM `users` ORDER BY `name` DESC, `email` ASC

     

    • أعجبني 2
×
×
  • أضف...