• 0

إظهار رسالة للمستخدم بعد نجاح عملية التسجيل Flutter + Laravel

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

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

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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
أخطاء إملائية
1 شخص أعجب بهذا

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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 شخص أعجب بهذا

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


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

نعم، فعلت هذا الكلام، ماذا أفعل من جهة Flutter ؟

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


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

تقوم بفحص ال api response إذا بيحتوي علي مصفوفة errors بتظهر للمستخدم رسالة بالخطاء بحيث يقوم بإدخال رقم اخر

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

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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 او غيرها افضل.

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

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


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

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

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

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


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

تسجيل الدخول

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


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