إيثار شروف

إيثار شروف

مطوّر ويب وتطبيقات

الإعدادات
الوضع الداكن

قائمة الأكواد

42 نتيجة

Others

معاني أرقام الاخطاء التي قد تراها على مواقع الأنترنيت

403 : ممنوع أن تصل لهذه الصفحة

404 : صفحة غير موجودة

500 : مشكلة في الموقع نفسه

401 : رؤية الصفحة تحتاج ترخيص (كلمة سر)

301 : تم نقل تلك الصفحة نهائيًا

307 : تم نقل تلك الصفحة مؤقتًا

405 : لقد وصلت لتلك الصفحة بطريقة خاطئة

408 : إنتهى وقت محاولة وصولك للصفحة قبل أن تصل إليها

414 : عنوان الصفحة\الموقع URL أطول من الطبيعي

503 : الخدمة غير متوفرة ربما بسبب الضغط الكبير على الموقع

كل أرقام الـ 100 : تعني معلومات إضافية (لن تراها في الغالب)

كل أرقام الـ 200 : تعني النجاح (لن تراها في الغالب)

كل أرقام الـ 300 : تعني إعادة توجيه Redirection

كل أرقام الـ 400 : تعني فشل من العميل “أنت”

كل أرقام الـ 500 : تعني فشل من السيرفر “الموقع نفسه”

21 يناير 2024 2,374 مشاهدة
Blade

إستخدام foreach في لارافيل

إذا كان لدينا @foreach في blade ونريد أن يتم طباعة سطر بعد كل عنصر يتم جلبة من قاعدة البيانات، بالإمكان إستخدام المتغير $loop لتحديد اذا كان العنصر الذي تم جلبه هو العنصر الأول أو الأخير أو حتى ما هو رقم العنصر

@foreach($posts as $post)
    <h2>{{ $post->title }}</h2>
    @if(!$loop->last)
        <hr/>
    @endif
@endforeach

المزيد من خصائص $loop يمكن الإطلاع عليها من هنا.

21 يناير 2024 3,028 مشاهدة
Eloquent

جلب مجموع السجلات عند إستخدام pagination

لجلب مجموع السجلات عند إستخدام pagination يجب تعيين المتغير sum قبل عمل pagination 

$query=Post::query();
$sum=$query->sum('post_views');
$posts=$query->paginate(10);

لأنة لو قمنا بعمل 

$query=Post::paginate(10);
$sum=$query->sum('post_views');

فإنه سيظهر المجموع فقط لكل صفحة.

21 يناير 2024 2,464 مشاهدة
Validation

التحقق من أن المدخلات تساوي قيمة معينة في laravel validation

نستطيع التحقق من أن قيمة الحقل تساوي قيمة معينة، مثل هنا سنتأكد أن  البريد الإلكتروني هو بريد معين

$validator = Validator::make($request->all(), [
    'title' => [
        'required',
        'max:255',
        function($attribute, $value, $fail) {
            if ($value === 'foo') {
                return $fail($attribute.' is invalid.');
            }
        },
    ],
]);

هنا إذا كانت قيمة الحقل = foo سيتم إرجال title is invalid

كما يمكن ببساطه إستخدام

'title' => [
    'in:foo',
],

هنا اذا كانت قيمة الحقل لا تساوي foo سيتم إرجاع The selected title is invalid.

'title' => [
    'not_in:foo',
],

هنا إذا كانت القيمة تساوي foo سيتم إرجاع خطأ

21 يناير 2024 2,674 مشاهدة
Eloquent

جلب البيانات بشكل عشوائي في لارافيل

في بعض الحالات، نحتاج لجلب البيانات من قاعدة البيانات بترتيب عشوائي مختلف في كل مرة، بدلاً من الترتيب الافتراضي (حسب id أو تاريخ الإنشاء مثلاً). من الأمثلة الشائعة على ذلك: أنظمة الاختبارات الإلكترونية، حيث نريد أن يظهر للطالب سؤال مختلف في كل مرة، مع ظهور خيارات الإجابة بترتيب مختلف أيضًا في كل محاولة، لتقليل فرص الغش أو حفظ الترتيب.

توفّر Laravel لهذا الغرض دالة جاهزة وبسيطة وهي inRandomOrder.


الاستخدام الأساسي: ترتيب عشوائي لجدول واحد

لجلب جميع الأسئلة بترتيب عشوائي في كل مرة يتم فيها تنفيذ الاستعلام:

$questions = Question::inRandomOrder()->get();

في كل مرة يُنفَّذ فيها هذا الكود، سيختلف ترتيب النتائج المُرجعة تلقائيًا، دون الحاجة لأي منطق إضافي أو خلط يدوي للمصفوفة بعد جلب البيانات.


الترتيب العشوائي عبر علاقة (Relationship)

الحالة الأكثر فائدة عمليًا هي عند التعامل مع علاقة بين جدولين، مثل نظام امتحان يحتوي على أسئلة (Questions) وإجابات (Answers) لكل سؤال. الهدف هنا مضاعف: جلب الأسئلة بترتيب عشوائي، وفي نفس الوقت جلب إجابات كل سؤال بترتيب عشوائي أيضًا.

لتحقيق ذلك، نستخدم inRandomOrder داخل تعريف العلاقة نفسها ضمن with:

$questions = Question::with(['answers' => function ($q) {
    $q->inRandomOrder();
}])->inRandomOrder()->get();

توضيح

  • inRandomOrder() الأولى (المطبقة مباشرة على Question) تُرتّب الأسئلة نفسها بشكل عشوائي.
  • inRandomOrder() الثانية (داخل Closure الخاصة بـ answers) تُرتّب إجابات كل سؤال بشكل عشوائي مستقل.
  • لاحظ أن الـ Closure يجب أن تستقبل المتغير $q كوسيط صريح (function ($q))، وليس بدون وسيط، وإلا سيصبح $q غير معرَّف داخل الدالة ويؤدي ذلك إلى خطأ عند التنفيذ.

بهذا الشكل، نحصل في كل مرة على أسئلة بترتيب مختلف، وكل سؤال منها يظهر بإجابات مرتبة عشوائيًا أيضًا، وهو بالضبط ما يحتاجه نظام امتحانات إلكتروني يريد تقليل إمكانية الحفظ أو الغش بالاعتماد على ترتيب ثابت.


ملاحظة حول الأداء

تعتمد inRandomOrder داخليًا على دالة ترتيب عشوائي في قاعدة البيانات (مثل ORDER BY RAND() في MySQL). هذه الطريقة تعمل بشكل ممتاز مع الجداول الصغيرة والمتوسطة، لكنها قد تصبح أبطأ نسبيًا مع الجداول الكبيرة جدًا (بعشرات أو مئات الآلاف من السجلات)، لأن قاعدة البيانات تحتاج لحساب قيمة عشوائية لكل صف قبل الترتيب. في حال كان الجدول ضخمًا وظهر تأثير ملحوظ على الأداء، يمكن اللجوء لحلول بديلة مثل الترتيب العشوائي على مستوى التطبيق بعد تحديد نطاق (LIMIT) أصغر من البيانات.

21 يناير 2024 2,564 مشاهدة
Eloquent

عمل تعديل مباشرة دون عمل تحميل البيانات من قاعدة البيانات

في eloquent، تستطيع عمل تعديل على حقول قواعد البيانات مباشرة دون تحميل البيانات

Cat::where('id',$id)->update(['title' => "Updated Title"]);
21 يناير 2024 2,336 مشاهدة
Migrations

إستخدام migration لإضافة حقل إلى جدول موجود

لإضافة حقل جديد إلى جدول موجود، مثلا إضافة حقل slug إلى جدول articles.

ننشئ migration جديد، ونسيمه addFieldNameToTableName

php artisan make:migration addSlugToPost
public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->string('slug');
        });
    }
21 يناير 2024 3,071 مشاهدة
Routing

إستخدام ترقيم bootstrap للصفحات بدل tailwind في laravel 8

في laravel 8  تم إستبدال ترقيم الصفحات pagination من bootstrap إلى tailwind، لكن نستطيع إستخدام ترقيم bootstrap من خلال

الذهاب الى صفحة app/Providers/AppServiceProvider.php ومن ثم بداخل الدالة boot

public function boot(){
  Paginator::useBootstrap();
}
21 يناير 2024 2,757 مشاهدة
Migrations

أنواع الحقول في laravel migration

يوجد أنواع متنوعة للجداول عند عمل migration ومن أهمها

$table->ipAddress('visitor');
$table->macAddress('device');

للمزيد من أنوع الحقول من الموقع الرسمي

21 يناير 2024 2,790 مشاهدة
Api

إرجاع خطأ 204 في لارافيل

اذا كنا نتعامل مع api لكن لا يوجد نتائج، يمكن إرجاع خطأ 204 ، بمعنى No Content ، فقط قم بإستخدام response()->noContent

public function reorder(Request $request){
    foreach ($request->input('rows', []) as $row) {
         Country::find($row['id'])->update(['position' => $row['position']]);
    }
    return response()->noContent();
}
21 يناير 2024 2,772 مشاهدة
Validation

التوقف عند أول عملية تحقق

بالوضع الإفتراضي، laravel validation error تقوم بإرجال قائمة بالأخطاء، لأنها تتحقق من جميع rules، لكن إذا أردنا أن تقف عملية التحقق بعد أول خطأ يمكن إستخدام bail

$request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);
21 يناير 2024 2,336 مشاهدة
Validation

تغيير رسالة التحقق الإفتراضيه في laravel

إذا أردنا تغيير رسالة الخطأ الإفتراضي في عمليات التحقق، يجب إضافة دالة message أسفل rules

class StoreUserRequest extends FormRequest{
    public function rules() {
        return ['name' => 'required'];
    }
    public function messages() {
        return ['name.required' => 'User name should be real name'];
    }
}
21 يناير 2024 2,583 مشاهدة