:: دورات القانون العقود والشؤون القانونية مركز_الرؤية_الاستراتيجية_للتدريب (آخر رد :AHMEDBBMF)       :: استمتع بتجربة مشاهدة لا مثيل لها مع خدمة iptv المميزة لدينا! (آخر رد :ضياء روحي)       :: دورات تسويق مبيعات خدمة العملاء الاستثمار العقاري وفن البيع والتسويق (آخر رد :AHMEDBBMF)       :: دورات #الهندسة_الكهربائية #2025 #مركز_الرؤية_الاستراتيجية (آخر رد :AHMEDBBMF)       :: دورات_تدريبية #امن_سلامة #اوشا #حريق #مركز_الرؤية_الاستراتيجية #2025 (آخر رد :AHMEDBBMF)       :: دورات الامن الصناعي والسلامة والصحة المهنية (آخر رد :AHMEDBBMF)       :: دورة تقسيم المناطق الخطرة واستخدام المعدات الكهربية ضد الانفجار|دورات هندسة الصيانة م (آخر رد :يارا مركز ITR)       :: دورة أنظمة التأريض الوقائي و الحماية من الصواعق في شبكات القوى الكهربائية|دورات هندسة (آخر رد :يارا مركز ITR)       :: دورة برنامج جودة التغذية الكهربية|دورات هندسة الصيانة والتشغيل مركزitr (آخر رد :يارا مركز ITR)       :: دورة حوكمة البيانات والحماية وإدارة الامتثال|دورات التجارة الخارجية مركزitr (آخر رد :يارا مركز ITR)      
اختر لونك:
وَقُلِ اعْمَلُوا فَسَيَرَى اللَّهُ عَمَلَكُمْ وَرَسُولُهُ وَالْمُؤْمِنُونَ ۖ وَسَتُرَدُّونَ إِلَىٰ عَالِمِ الْغَيْبِ وَالشَّهَادَةِ فَيُنَبِّئُكُم بِمَا كُنتُمْ تَعْمَلُونَ [ التوبة : ( 105 )] كلمة الإدارة

يرجى إختيار القسم المناسب قبل النشر وسيعاقب المخالف بإنذار أول مرة وسيتم حظره إذا تكرر ذلك كلمة الإدارة

يُمنع كتابة مواضيع السحر والشعوذة والروحانيات والابراج بكافة الأشكال والمخالف سيعاقب بحظر مؤقت وإذا تكرر سيكون حظر دائم تنبيه هام جداً



أضف رد جديد
 
LinkBack أدوات الموضوع انواع عرض الموضوع

قديم 23-02-2019, 04:04 PM   #1
تاريخ التسجيل: Feb 2019
المشاركات: 1,010
التقييم: 10
تاريخ التسجيل: Feb 2019
المشاركات: 1,010
التقييم: 10
افتراضي أساسيات التحقق من المدخلات في Laravel

أساسيات التحقق من المدخلات في Laravel

كان من الشائع في بدايات التطوير للوب كتابةُ الاستمارات بوسوم HTML ثم إضافة شفرة مخصَّصة للتأكد من مُدخَلات الزائر. وفّرت لغة البرمجة PHP بعد ذلك دوالَّ معيارية للتحقّق من المُدخلات؛ خفّفت هذه الدوّال قليلا من العبء على المطوِّر إلا أنها تركت له مهمّة تعريف طريقة للتحقّق من المُدخلات ومن ثمّ معالجتها أو إشعار الزائر بالبيانات غير الصالحة وعرض الاستمارة من جديد. يزيح Laravel هذه المتاعب بتوفير شيفرة للتحقّق وطريقة للتعامل مع المُدخلات.

يقدّم هذا المقال دليلا لكيفيّة إنشاء استمارات والتحقّق من مدخلات الزائر في Laravel. سنأخذ مثالا لإضافة تصنيف Category ضمن جدول تصنيفات Categories في تطبيق؛ يمكن أن يتعلّق الأمر بتصنيف منشورات مدوّنة، منتجات متجر أو أي شيء مماثل.

laravel-input-validation.png

تهيئة تطبيق Laravel
نفترض أن Laravel مثبَّت وجاهز للعمل مع قاعدة البيانات. نهيّئ التطبيق قبل أن نشرع في إنشاء الاستمارة وأدوات التحقّق المصاحبة لها.

إنشاء نموذج التصنيف والتهجير الموافق له
سيتكون نموذج التصنيف من حقل للاسم إضافة إلى حقل المعرّف id والأختام الزمنية Timestamps. نستخدم artisan لتوليد النموذج والتهجير:

$ php artisan make:model Category -m
Model created successfully.
Created Migration: 2016_06_13_010501_create_categories_table
ثم نفتح ملفّ التهجير (داخل المجلّد database/migrations) ونحدّث الدالة up على النحو التالي:

public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
ثم ننفّذ التهجير:

$ php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrated: 2016_06_13_010501_create_categories_table
ننتقل الآن للعمل على المتحكّم Controller الذي سيكون المسؤول عن معالجة محتوى الاستمارة.

إنشاء المتحكم وتعريف المسارات
نستخدم أداة artisan لإنشاء المتحكّم الذي سنستخدمه - من بين أمور أخرى - لعرض النموذج ومعالجة بياناته:

$ php artisan make:controller CategoriesController.php --resource
Controller created successfully.
ينشئ أمر make:controller عند استخدام المعطى resource--متحكّما بدوال update، edit، store، create، show``index وdestroy. راجع درس أساسيات بناء التطبيقات في إطار العمل Laravel 5 للمزيد عن هذه الدوال.

بقي لنا تعريف المسارات في الملفّ app/Http/routes.php؛ نستخدم Route::resource لهذا الغرض:

Route::resource('categories', 'CategoriesController');
إنشاء العروض Views
نركّز لأغراض هذا الدّرس على الدالتيْن create وstore المسؤولتيْن على التوالي عن عرض الاستمارة وتخزين بياناتها (في حال تجاوز اختبار التحقّق؛ كما سنرى). تبدو الدالتان لحدّ الساعة فارغتيْن:

public function create()
{
//
}

public function store(Request $request)
{
//
}

...
نحدّث الدالة create كالتالي:

public function create()
{
return view('categories.create');
}
أي أننا نطلُب تقديم العرض create.blade.php الموجود في المجلّد resources/views/categories. ننشئ المجلّد categories وننشئ بداخله الملفّ create.blade.php. سنكتفي الآن بإضافة الوسوم التالية إلى ملفّ العرض:

<h1>Create a Category</h1>
يمكنك بعد حفظ الملفّ زيارة الرابط categories/create/ وسيظهر العنوان أعلاه.

إنشاء استمارة في Laravel
نريد أن نعرض للزائر استمارة لملئها؛ يمكن أن ننشئ هذه الاستمارة بكتابة وسوم HTML المطلوبة في ملفّ العرض create؛ إلا أنه يمكننا الاستفادة من حزمة laravelcollective/html لتولّي هذه المهمّة. نضيف الحزمة إلى مشروع Laravel بتنفيذ الأمر التالي داخل مجلّد المشروع:

$ composer require laravelcollective/html
ثم نفتح ملفّ الإعداد config/app ونضيف السطر التالي إلى مصفوفة providers:

Collective\Html\HtmlServiceProvider::class,
لتبدو المصفوفة كالتالي (نزعنا بعض محتويات المصفوفة للاختصار):

'providers' => [
...
App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
Collective\Html\HtmlServiceProvider::class,
]
نكمل مع نفس الملفّ بالانتقال إلى المصفوفة aliases التي نضيف إليها السّطر التالي:

'Form' => Collective\Html\FormFacade::class
لتصبح كما يلي:

'aliases' => [
...
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'Form' => Collective\Html\FormFacade::class
]
احفظ الملفّ.

أكملنا تثبيت الحزمة وإعدادها. نعيد فتح ملفّ العرض create ونعدّل محتواه ليصبح على النحو التالي:

<h1>Create a Category</h1>

{!! Form::open(
array(
'route' => 'categories.store',
'class' => 'form')
) !!}

@if (count($errors) > 0)
<div class="alert alert-danger">
There were some problems adding the category.<br />
<ul>
@foreach ($errors->all() as $error)
<li></li>
@endforeach
</ul>
</div>
@endif

<div class="form-group">
{!! Form::label('Category') !!}
{!! Form::text('name', null,
array(
'class'=>'form-control',
'placeholder'=>'List Name'
)) !!}
</div>

<div class="form-group">
{!! Form::submit('Create Category!',
array('class'=>'btn btn-primary'
)) !!}
</div>
{!! Form::close() !!}
</div>
تضيف حزمة laravelcollective/html تعليمات خاصّة بإنشاء الاستمارات إلى نظام Blade للقوالب.

يشير مسار الاستمارة إلى categories/store لأن دالّة store في المتحكّم CategoriesController هي التي ستتولّى معالجة بيانات الاستمارة. تستخدم التعليمة Form::open مبدئيا إجراء POST؛ لذا لا حاجة لتعيينه.
يُستخدَم المقطع if..@endif@ لتقديم معلومات إلى المستخدم عن أخطاء التحقق. سنفصّل هذا الأمر بعد قليل.
مرّرنا لأغراض جمالية أصنافا وخاصيّات من Bootstrap إلى الاستمارة ؛ هذا ليس ضروريا وستعمل الاستمارة بدونه.
تظهر الآن الاستمارة بالذهاب إلى categories/create/.

01_categories_create.png

يمكنك إدخال اسم تصنيف وإرسال الاستمارة وستُوجَّه إلى categories/store/ لكنّ شيئا لن يحدُث لأننا لم نكتب حتى الآن شيئا في الدالة store من المتحكّم CategoriesController.

معالجة الاستمارة
نعود للدالة store في المتحكم CategoriesController. هذه هي الدالة التي تُرسَل إليها بيانات الاستمارة بعد النقر على زرّ الإرسال. نحدّث المتحكّم كالتالي:

use App\Category;

...

public function store(Request $request)
{

$category = new Category;

$category->name = $request->get('name');

$category->save();

return \Redirect::route('categories.show', array($category->id));

}
بدأنا أولا باستيراد النموذج Category في المتحكّم ثم استخدمناه في الدالة store لتخزين تسجيلة Record جديدة في جدول قاعدة البيانات اعتمادا على محتويات الاستمارة؛ ثم بعد التخزين نعيد توجيه المستخدم إلى الدالة show ضمن المتحكّم CategoriesController مع معرّف التصنيف الذي أضفناه للتو. يمكننا تعديل الدالة show كالتالي لعرض رسالة تفيد بنجاح إضافة التصنيف:

public function show($id)
{
//
$category = Category::find($id);
$message = "$category->name has been added succefully";

return $message;
}
من الملاحظ أننا لم نتحقّق في العمليّة السابقة من مُدخلات المستخدم. يعني هذا أنه يمكن - مثلا - ترك الحقل الخاصّ باسم التصنيف فارغا وسيُحفظ تصنيف بدون اسم في قاعدة البيانات؛ طبعا هذا غير مقبول.

التحقق من الاستمارة قبل الإرسال
يوفّر Laravel 5 ميزة تُسمى طلب الاستمارة Form request تسمح بالتحقق من حقول الاستمارة دون تلويث المتحكّم. يدير ملفّ منفصل قواعد التحقّق من الاستمارة؛ نستخدم أمر artisan التالي لإنشاء هذا الملفّ:

$ php artisan make:request CreateCategoryFormRequest
Request created successfully.
ينشئ الأمر ملفا باسم CreateCategoryFormRequest.php في المجلد app/Http/Requests. يبدو الملفّ كالتالي:

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class CreateCategoryFormRequest extends Request
{

public function authorize()
{
return false;
}

public function rules()
{
return [
//
];
}
}
عدّل الدالة authorize كالتالي:

public function authorize()
{
return true;
}
نحتاج لتحديد القيمة true بالنسبة للدالة authorize لأنه في حال كانت القيمة false فلن تُعالج بيانات الاستمارة.

ثم نعدّل الدالة rules:

public function rules()
{
return [
'name' => 'required'
];
}
تعرّف الدالة قواعد التحقّق؛ عرّفنا أعلاه الحقل name ضمن الاستمارة بأنه مطلوب required؛ أي أن الاستمارة لن تُرسَل إلا إذا كانت توجد قيمة لهذا الحقل. تمكن إضافة أكثر من شرط على الحقل كالتالي:

'name' => 'required|alpha'
نحتاج الآن لدمج طلب الاستمارة في الدالة store ضمن المتحكّم CategoriesController. نبدأ باستيراد الصنف في المتحكّم كالتالي:

use App\Http\Requests\CreateCategoryFormRequest;
ثم نحدّث الدالة store ليكون الكائن الممرَّر إليها من الصّنف CreateCategoryFormRequest:

public function store(CreateCategoryFormRequest $request)
{

...

}
ابتداءً من الآن سيتحقّق Laravel من بيانات الحقل قبل إرسالها؛ وفي حال الإخفاق في التحقق من الشرط سيعيد الزائر إلى صفحة الاستمارة مع عرض رسالة بوجود خطأ.

الفارس غير متواجد حالياً   اقتباس
قديم 26-07-2019, 03:19 PM   #2
الصورة الرمزية هديل الحرف
تاريخ التسجيل: Jul 2019
العمر: 30
المشاركات: 504
التقييم: 10
افتراضي

بارك الله فيك
إستمر ولك التوفيق بـإذن الله
تقديري وإحترامي
هديل الحرف غير متواجد حالياً   اقتباس
أضف رد جديد

الكلمات الدلالية (Tags)
منتديات رحيل, رحيل, شبكة رحيل, r7il, r7il.com


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة


المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
إدارة الصور في laravel 5 أساسيات إدارة الصور في 5 Laravel - الجزء الثالث الفارس قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 1 27-07-2019 10:43 AM
إدارة الصور في laravel 5 أساسيات إدارة الصور في Laravel 5 - الجزء الثاني الفارس قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 1 27-07-2019 10:43 AM
أساسيات إدارة الصور في Laravel - الجزء الأول الفارس قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 1 27-07-2019 10:42 AM
تثبيت Laravel 5 وإعداده على Windows وUbuntu الفارس قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 1 27-07-2019 10:40 AM
نشر تطبيقات Laravel على منصة Heroku الفارس قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 1 26-07-2019 03:22 PM


الساعة الآن 05:56 PM

 


Content Relevant URLs by vBSEO ©2010, Crawlability, Inc.