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

السؤال

نشر

انا مبرمج لارافل حديث. قمت بعمل 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

Recommended Posts

  • 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
أخطاء إملائية
  • 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 فشكرا لك اخي

  • 0
نشر
بتاريخ 4 دقائق مضت قال محمود رضا موسى:

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

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

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

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

^[0-9]+$

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

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

  • 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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...