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

السؤال

نشر

أريد عندما يقوم المستخدم سواء بعملية ( login / register )، وكان رقم الجوال مسجل في قاعدة البيانات، أن يقوم بإظهر رسالة مناسبة له.

ملاحظة / ال validation من جهة Laravel جاهز، ويقوم فعلا بإرجاع رسالة أنه يجب أن يكون unique

Recommended Posts

  • 0
نشر (معدل)

يمكنك استخدم الرسائل الخاص بك عن طريق تعريف مصفوفه خاصه تحتوي الرسائل التي تحتاجها 

  • مصفوفة الشروط
$rules = array(
	'phone' => 'required|unique:users,phone'
);

 

  • مصفوفة تحتوي علي الرسائل التي تظهر في حالة حدوث أخطاء
$messages = array(
	'phone.required' => 'Phone is required.',
	'phone.unique' => 'Phone must be unique.',
);
  • فحص الداتا المدخله من المستخدم و ظهور الاخطاء في حالة وجود أخطاء
$validator = Validator::make( $request->all(), $rules, $messages );


if ( $validator->fails() ) 
{
    return [
        'success' => 0, 
        'message' => $validator->errors()->toArray()
    ];
}

ويمكن فصل عملية ال Validation في كلاس منفصل يسمي FormRequest وتنقل كل عمليات ال Validation داخل هذا الكلاس

  • إنشاء الكلاس عن طريق أمر في لارفال ويتم إنشاءه داخل مجلد app\Http\Requests
php artisan make:request AuthRequest
  • ثم تقوم باضافة عمليات ال validation داخل دالة ال rules وإضافة الرسائل الخاصه داخل دالة messages
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;

class AuthRequest extends FormRequest
{
    
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
          'phone' => 'required|unique:users,phone',
		];
    }

	public function messages()
    {
        return [
            'phone.required' => 'Phone is required',
            'phone.unique' => 'Phone is unique'
        ];
    }
}
  • ثم تستدعي هذا الكلاس داخل Controller وسيقوم ال AuthRequest بإظهار الاخطاء في حالة وجود أخطاء
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

use App\Http\Requests\AuthRequest;

class AuthController extends Controller
{
    public function login(AuthRequest $request)
    {
        // $validator = Validator::make($request->all(), [
        //     'phone' => 'required|unique:users,phone'
        // ]);// end of validator

        // if ($validator->fails()) {
        //     return Redirect::back()->withErrors($validator);
        // }//end of if

        // do register or login operation
        // ..........
    }// end of login

}

 

تم التعديل في بواسطة محمد صقر3
  • 1
نشر (معدل)

الان و بعد الإنتهاء من جانب الباك اند يتطلب عليك التحقق إن كان الرد من الـ API يحمل أخطاء بأكواد حالات معينة ومن ثم التصرف بناء عليه , كأن تقوم بتعطيل عملية التسجيل أو مواصلة العملية بعد تسجيل التوكن و اعادة التوجيه .

و هذا طبعا يخضع لأكواد الحالات بالـ API الذي تقوم بجلب منه البيانات و يخضع أيضا لتعريفك للـ errors .

فعلى سبيل المثال يكون الكود كالتالي : 

// قم باستدعاء الدالة من المكان الصحيح 
login() async{
    var response = await http.post('/your-end-point',auth_data);
    
    if(response.statusCode == 422){
      print(jsonDecode(response.body['errors'])) // طباعة الاخطاء في حالة وجودها
    }
  
    else{
    // اكمال عملية تسجيل الدخول و عمل اعادة التوجيه بعد تسجيل التوكن وحفظه
    }
}

ومن المفضل في الباك اند في اللارافل استعمال الواجهة : 

<?php 

use Illuminate\Support\Facades\Validator;
..

عوضا عن الميثود validate ضمن الـ instance الذي اسمه Request : 

<?php 

class myController extends Controller{

   public function myMethod(Request $request){ 
     $request->validate($rules);
    }

}

حتى تتحصل على حرية أكبر ولا تترك الـ Laravel Exceptions يتولى إعادة التوجيه و تسجيل الأخطاء بالجلسة التي هي من المفروض خارج العملية فيما يخص بناء الAPI و باقي العملية.

تم التعديل في بواسطة Adnane Kadri
أخطاء إملائية
  • 0
نشر
بتاريخ 4 ساعات قال Adnane Kadri:

الان و بعد الإنتهاء من جانب الباك اند يتطلب عليك التحقق إن كان الرد من الـ API يحمل أخطاء بأكواد حالات معينة ومن ثم التصرف بناء عليه , كأن تقوم بتعطيل عملية التسجيل أو مواصلة العملية بعد تسجيل التوكن و اعادة التوجيه .

و هذا طبعا يخضع لأكواد الحالات بالـ API الذي تقوم بجلب منه البيانات و يخضع أيضا لتعريفك للـ errors .

فعلى سبيل المثال يكون الكود كالتالي : 


// قم باستدعاء الدالة من المكان الصحيح 
login() async{
    var response = await http.post('/your-end-point',auth_data);
    
    if(response.statusCode == 422){
      print(jsonDecode(response.body['errors'])) // طباعة الاخطاء في حالة وجودها
    }
  
    else{
    // اكمال عملية تسجيل الدخول و عمل اعادة التوجيه بعد تسجيل التوكن وحفظه
    }
}

ومن المفضل في الباك اند في اللارافل استعمال الواجهة : 


<?php 

use Illuminate\Support\Facades\Validator;
..

عوضا عن الميثود validate ضمن الـ instance الذي اسمه Request : 


<?php 

class myController extends Controller{

   public function myMethod(Request $request){ 
     $request->validate($rules);
    }

}

حتى تتحصل على حرية أكبر ولا تترك الـ Laravel Exceptions يتولى إعادة التوجيه و تسجيل الأخطاء بالجلسة التي هي من المفروض خارج العملية فيما يخص بناء الAPI و باقي العملية.

شكرا بجد ( الخلاصة التي استفدتها أن الموضوع من قبل فلاتر يتم ب: responce.StatusCode عندما تكون قيمته تساوي ب 422 )، لكن لم تنجح معي للأسف في فلاتر علما أني أستخدم حزمة Dio ومع العلم أيضا أن VS code يظهر لي أن Status code الذي حصل 422 لكن لم يستطع أن يقرأ الرد مع العمل أيضا أن الرد شغال وقمت بتحربته باستخدام Postman

المشكلة باختصار / عدم تمكن فلاتر من قراءة الرد القادم من ال server

  • 0
نشر (معدل)

@بلال زيادة

باشا، تقريبا فهمت اللي بيحصل معايا

الآن لما أبعت ال req بيجيلي ال res بتاع ال errors افتراضيا ب status code 422

وهادا ال status code مسجل في حزمة DIo انه ( DioErrorType (DioErrorType.response) )

ف عشان هيك التطبيق بيوقف

أما لما أغير ال status code من ال API مثلا ل 201 بيشتغل مية مية.

ف السؤال الآن / هل لما أغير ال status code بتعت الأخطاء من 422 ل 201 مثلا أو أي رقم تاني، بيأثر بشكل سلبي على اشي في التطبيق؟

ولو عايز أخلي الموضوع ماشي طبيعي ( أمشي على القيم الافتراضية )، فكيف أحل هادا الموضوع ( من فلاتر وليس من API

تم التعديل في بواسطة Mohammed Abu Yousef
  • 0
نشر
بتاريخ 49 دقائق مضت قال Mohammed Abu Yousef:

@بلال زيادة

باشا، تقريبا فهمت اللي بيحصل معايا

الآن لما أبعت ال req بيجيلي ال res بتاع ال errors افتراضيا ب status code 422

وهادا ال status code مسجل في حزمة DIo انه ( DioErrorType (DioErrorType.response) )

ف عشان هيك التطبيق بيوقف

أما لما أغير ال status code من ال API مثلا ل 201 بيشتغل مية مية.

ف السؤال الآن / هل لما أغير ال status code بتعت الأخطاء من 422 ل 201 مثلا أو أي رقم تاني، بيأثر بشكل سلبي على اشي في التطبيق؟

ولو عايز أخلي الموضوع ماشي طبيعي ( أمشي على القيم الافتراضية )، فكيف أحل هادا الموضوع ( من فلاتر وليس من API

شوف لازم انتا في api ترجع قيمة الخطأ اذا 200 او 401 او اي قيمة تانيه بحيث اتناسب مع حالة الريكويست اي api ، طبعا تغيير القيمة يؤثر نوعا ما ولكن ممكن تغيرها بس الافضل ترجع كل حالة بقيمتها سواء 200 او غيرها افضل.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...