• 0

الدالة find في laravel eloquent

انا مبرمج لارافل حديث. قمت بعمل route يدخللي على هذا الرابط 

news/edit/{id}/

حيث أن {id} هنا هو رقم id لخاص بكل خبر.

فقمت بتجربة الid: 1 فقام بجلب لي معلومات الid 1 وهذا امر منطقي. لكن الغريب ان عندما اكتب 1 في خانة id متبعة بحروف غريبة مثل kudhd او hdkd او h او اي حرف وليس رقم فيقوم بجلب لي ايضا معلومات الid 1 فكيف؟ .. الصورة موضحة قصدي.

اقصد كيف يتم عمل ignore للاحرف بعد رقم الid ويأخذ الرقم فقط.

مع العلم انه عندما اكتب id غير موجود بالداتا بيز بيعمللي redirect زي المكتوب في كود الكنترولر المرفق عادي 

ف ليه مش بيعمللي redirect لما يلاقي رقم وجمبه حروف غريبة؟

Capture.PNG

Capture2.PNG

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يمكنك تخصيص نوع البيانات في البارمتر الممرر في الراوت عن طريق التابع where , الذي يقبل البارمترز على الترتيب : 

param : معبرة عن اسم البارمتر الذي تقوم بتمريره .

regex : تعبر عن Regular Expression تخص المقبول في هذا البارمتر فقط .

و يتم تعريف التابع where التابع للinstance الذي اسمه Route في مثالك عن طريق : 

<?
Route::get('news/edit/{id}', 'YourController@your_method')->where('id', '$[0-9]+^');

غير أن هاته الطريقة لن تحقق الغرض و سيتم رمي Exception Not Found 404 في حالة ما كان البارمتر id لا يماثل العبارة [0-9]+ , أي أنه ليس integer .

أما في حالة ما أردت عمل Redirect لصفحة تريدها من داخل الController فيمكنك عمل validation بسيط للـ ID الممرر بهذا الشكل : 

<?php 

use Illuminate\Support\Facades\Validator; // لا تنسى تضمين الواجهات الللازمة

class MyController extends Controller{
 

    public function myMethod(Request $request){

     $validator = Validator::make($request->all() , ['id' => 'integer']);

     if($validator->fails()){

      // قم باعادة التوجيه

     }

    }

}

 

تمّ تعديل بواسطة Adnane Kadri
أخطاء إملائية
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

اشكرك شكراً جزيلا اخي بارك الله فيك وزاد من علمك. اشكرك على توضيح لي الفكرة والحمد لله اجابتك صحيحة 99%

فأتمنى منك تعديل هذا الخطأ المطبعي الغير مقصود منك وهو 

بتاريخ 6 دقائق مضت قال Adnane Kadri:

يمكنك تخصيص نوع البيانات في البارمتر الممرر في الراوت عن طريق التابع with 

اظن انها where كما قلت انت وليست with

بتاريخ 8 دقائق مضت قال Adnane Kadri:

Route::get('news/edit/{id}', 'YourController@your_method')->where('id', '[0-9]+');

 

ثاني خطأهنا وهو ان هذا الregex هيعمل matching مع 1 وأيضا مع 1f1hfh4 يعني يجب أن يكون الregex كالشكل التالي 

^[0-9]+$

انت من علمتني في سئالي السابق مبادئ الregex فشكرا لك اخي

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 4 دقائق مضت قال محمود رضا موسى:

اشكرك شكراً جزيلا اخي بارك الله فيك وزاد من علمك. اشكرك على توضيح لي الفكرة والحمد لله اجابتك صحيحة 99%

فأتمنى منك تعديل هذا الخطأ المطبعي الغير مقصود منك وهو 

اظن انها where كما قلت انت وليست with

ثاني خطأهنا وهو ان هذا الregex هيعمل matching مع 1 وأيضا مع 1f1hfh4 يعني يجب أن يكون الregex كالشكل التالي 

^[0-9]+$

انت من علمتني في سئالي السابق مبادئ الregex فشكرا لك اخي

بالفعل هي مثل ما قلت ، وقد تم تصليح الأخطاء الإملائية التي وردت بارك الله فيك و وفقك الله لما يحبه و يرضاه. 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
  • بالاضافه إلي ما تفضل بشرحه @Adnane Kadri يمكن إيضا إضافة validation إذا ال id موجود في جدول ال news
  • بإضافة ال exists:news,id لل validation علي ال id
 $validator = Validator::make($request->all() , ['id' => 'required|integer|exists:news,id']);
  • يوجد if condition لفحص ما إذا ال news موجوده او لا وتعمل redirect بالايرور ولكن ال validation ستقوم بفحص أن ال id, required, integer, exists in news table or not وفي حالة وجود أخطاء ستقوم بعمل redirect من ال fail function كما تفصل اخي بشرحها
  • في هذه الحالة يمكنك الاستغناء عن الشرط في أول دالة ال edit 
تمّ تعديل بواسطة محمد صقر3
2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن