به طراح وب خوش آمدید.
اکنون بیش از هر زمان دیگری، مهم است که داده های برنامه های شما قابل اعتماد، دقیق و مطابق با تمام نیازهای سیستم باشد. هدف آن اطمینان از سازگاری داده ها و جلوگیری از آسیب پذیری های امنیتی است.
لاراول اعتبار سنجی داده ها را ساده و شهودی می کند. از معماری Model View Controller (MVC) پیروی می کند و فقط به دانش کلی PHP و مفاهیم برنامه نویسی شی گرا (OOP) نیاز دارد. علاوه بر این، لاراول چندین روش برای اعتبارسنجی داده های دریافتی ارائه می دهد.
برخی از این رویکردها و نحوه اعمال قوانین اعتبارسنجی در مجموعه داده خود را بررسی کنید.
اعتبارسنجی داده ها در لاراول آسان شده است
هنگامی که کاربران برنامه شما داده ها را از طریق فرم ها ارسال می کنند، لاراول چندین قانون اعتبار سنجی آماده برای استفاده را ارائه می دهد. میتوانید فیلدهای ورودی را بهعنوان مورد نیاز علامتگذاری کنید، حداقل یا حداکثر طول را تعیین کنید و به ورودیهای منحصربهفرد (نه تکراری) و آدرسهای ایمیل معتبر نیاز داشته باشید. اعتبار سنج لاراول بررسی می کند که آیا ورودی با این قوانین یا سایر قوانینی که شما مشخص کرده اید مطابقت دارد یا خیر.
اینها قوانین اعتبارسنجی لاراول عبارتند از:
-
required
– این فیلدها نباید خالی یا خالی باشند. -
array
– داده های فیلد باید یک آرایه PHP باشد. -
bail
– اجرای قانون اعتبارسنجی پس از مواجهه با اولین خطای اعتبارسنجی متوقف می شود. -
email
– این فیلدها باید یک آدرس ایمیل معتبر باشند. -
unique
– این فیلدها نباید دارای موارد تکراری در جدول پایگاه داده باشند.
همه روشهای تأیید مزایا و معایب خود را دارند، اما تنوع آنها به شما امکان میدهد بهترین رویکرد را برای نیازهای خود انتخاب کنید. بسته به روشی که انتخاب میکنید، اعتبارسنجی لاراول میتواند به روشهای مختلفی انجام شود، با پیامهای خطای دستی یا خودکار.
متداول ترین روش code>validate است که برای درخواست های HTTP ورودی استفاده می شود. این روش با اجرای قوانین اعتبارسنجی به داده های درخواستی متصل می شود. همانطور که در مثال زیر نشان داده شده است، می توانید قوانین هر فیلد را با کاما جدا کنید.
use Illuminate\Http\Request;
public function store (Request $request){
$validated = $request->validate([
'email' => ['required, unique:users, email, bail'],
'name' => ['required'],
]);
}
اینجا، email
یک ورودی ضروری است، یعنی نمی تواند null باشد. علاوه بر این، باید منحصر به فرد باشد users
جدول پایگاه داده، اطمینان از عدم ثبت آدرس ایمیل یکسان دو بار. آخرین قانون مستلزم آن است که آدرس ایمیل نیز معتبر باشد. در غیر این صورت، فرآیند تأیید خاتمه می یابد. فیلد نام الزامی است اما قوانین دیگری ندارد.
اگر هر یک از قوانین اعتبارسنجی لاراول شکست بخورد، یک پاسخ به طور خودکار ایجاد می شود.
مبانی اعتبارسنجی
برای درک بهتر روش های اعتبار سنجی، مثال زیر را در نظر بگیرید. شما یک مسیر برای نقطه پایانی تعریف می کنید و یک کنترل کننده برای اعتبارسنجی و پردازش داده های درخواست ایجاد می کنید.
ابتدا یک نقطه پایانی ساده ایجاد کنید که به کاربران امکان می دهد ایمیل ها و رمزهای عبور خود را ذخیره کنند.
یک مسیر تعریف کنید
مسیرهای لاراول در تعریف شده است routes/web.php فایل برای یک برنامه وب یا routes/api.php برای API برای این مثال استفاده کنید API.php:
use App\Http\Controllers\UserController;
Route::post('/store', [UserController::class]);
یک کنترلر ایجاد کنید
این دستور Artisan را برای ایجاد یک کنترلر اجرا کنید:
php artisan make:controller
UserController
این دستور ایجاد می کند UserController.php فایل در برنامه/http/کنترلرها کاتالوگ
حالا تعریف کن store
روشی برای اعتبارسنجی دادههای رسیده به نقطه پایانی ذخیرهسازی قبل از ذخیرهسازی.
این مثال با استفاده از این قوانین فیلدهای زیر را تأیید می کند:
- پست الکترونیک – باید آدرس ایمیل منحصر به فرد و معتبر باشد و باید الزامی باشد
- کلمه عبور – باید دارای حداقل طول، تایید رمز عبور و الزامی باشد
- سن – باید عدد باشد و الزامی باشد
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Store new user details.
*
*/
public function store(Request $request){
$validated = $request->validate([
'email' => 'required|unique:users|email',
'age' => 'required|numeric',
'password' => 'required|min:7|confirmed'
]);
// After user data is validated, logic to store the data
}
}
confirmed
این قانون به شما این امکان را میدهد که برای اطمینان از صحت دادهها، مثلاً کاربران در حین ثبت نام، رمز عبور خود را دوباره وارد کنند، یک فیلد خاص را دو بار پرس و جو کنید. این قانون نیاز به یک فیلد به نام دارد password_confirmation
که داده های آن باید مطابقت داشته باشد کلمه عبور رشته.
نمایش پیام های خطا
اگر معیارهای اعتبارسنجی برآورده شوند، کد شما به طور عادی به کار خود ادامه می دهد. اگر چک ناموفق باشد، IlluminateValidationValidationException
یک استثنا پرتاب می شود و یک پاسخ خطای مناسب برگردانده می شود.
مثال بر اساس یک API است که برمی گردد ۴۲۲ Unprocessable Entity
پاسخ HTTP در قالب JSON. برای برنامه های وب، به آدرس قبلی هدایت می شود تا یک پیام خطا نمایش داده شود و داده های درخواست به جلسه ارسال می شود.
شما می توانید استفاده کنید $errors
متغیر در نماهای شما برای نمایش خطاهای برگشتی:
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
شما همچنین می توانید فقط اولین خطا را مشاهده کنید یا همه آنها را در یک حلقه مشاهده کنید.
// Fetch all errors
$errors->all()
// Fetch only the first error
$errors->first()
پر کردن مجدد فرم ها
پر کردن مجدد فرم ها کاربران را از وارد کردن مجدد اطلاعات نجات می دهد تا بتوانند بر رفع خطا تمرکز کنند. در مثال خطای آدرس ایمیل، میتوانید با فراخوانی مقدار قبلی، بقیه فرم را دوباره پر کنید name
رشته.
$name = $request-> old('name')
//Blade helper
<input type="text" name="name" value="{{ old('name') }}">
این قانون باز خواهد گشت null
اگر ورودی قبلی وجود نداشت
اعتبار سنجی تمدید شده
لاراول روش دیگری را برای نوشتن اعتبارسنجی ارائه می دهد که درخواست فرم نامیده می شود. درخواست فرم یک کلاس درخواست سفارشی است که اعتبارسنجی ها را سازماندهی می کند و کنترلر شما را مرتب می کند.
آنها منطق اعتبارسنجی و مجوز خود را دارند که برای مقادیر زیاد ورودی مناسب است و می توان از آنها برای تعریف قوانین اعتبارسنجی و سفارشی کردن پیام های خطا استفاده کرد.
برای ایجاد یک درخواست فرم، دستور Artisan را اجرا کنید:
php artisan make:request StoreUserRequest
این دستور ایجاد می کند StoreUserRequest.php فایل در برنامه/http/درخواست ها دایرکتوری و شامل دو روش پیش فرض است:
rules
قوانین اعتبارسنجی داده های درخواست را برمی گرداند.authorize
یک مقدار بولی برمیگرداند تا نشان دهد آیا این کاربر مجوز انجام عمل درخواستی را دارد یا خیر.
مثال قبلی را برای استفاده از فرم درخواست تبدیل کنید.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
// Add logic to check if the user is authorized to submit this data.
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'email' => 'required|unique:users|email',
'age' => 'required|numeric',
'password' => 'required|min:7|confirmed'
];
}
}
برای سفارشی کردن پیامهای خطای این قوانین، میتوانید روش پیامها را در آن لغو کنید FormRequest
مقطع تحصیلی.
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
'email.required' => 'An email address is required',
'email.email' => 'The email address must be valid',
'password.confirmed'=>'Re-type your password as
password_confirmation, passwords does not match'
];
}
توجه داشته باشید: نام داده و قانون اعتبارسنجی با یک نقطه (.) قبل از داده پیام از هم جدا می شوند.
اعتبار سنجی سفارشی
برای ایجاد یک اعتبارسنجی سفارشی می توانید استفاده کنید Validator
در عوض نما validate
. نمونه اعتبار سنجی شامل دو آرگومان است: داده برای اعتبارسنجی و آرایه ای از قوانین اعتبارسنجی. به این دو استدلال منتقل می شود ::make
در نمای اعتبار دهنده، یک نمونه جدید از اعتبار سنج ایجاد می کند.
use Illuminate\Http\Request;
public function store (Request $request){
$validator = Validator::make($request->all(),[
'email' => 'required|unique:users|email',
'age' => 'required|numeric',
'password' => 'required|min:7|confirmed'
]);
if ($validator->fails()) {
// Return errors or redirect back with errors
return $validator->errors();
}
// Retrieve the validated input...
$validated = $validator->validated();
// Continue logic to store the data
}
اگر می خواهید مستقیم خودکار را اضافه کنید، می توانید این کار را انجام دهید validate
روش در یک نمونه اعتبارسنجی موجود. اگر اعتبارسنجی ناموفق باشد، درخواست XHR یک پاسخ JSON ایجاد می کند ۴۲۲ Unprocessable Entity
به عنوان کد وضعیت، در غیر این صورت کاربر بلافاصله هدایت می شود.
$validator = Validator::make($request->all(),[
'email' => 'required|unique:users|email',
'password' => 'required|min:7|confirmed'
])->validate();
شما همچنین می توانید پیام های خطای خود را با ارسال آرگومان سوم به نام شخصی سازی کنید messages
به Validate::make method
:
$validator = Validator::make($request->all(),[
'email' => 'required|unique:users|email',
'age' => 'required|numeric',
'password' => 'required|min:7|confirmed'
], $messages = [
'required' => 'The :attribute field is required.',
]);
توجه داشته باشید: :attribute
با نام فیلد مورد بررسی جایگزین می شود.
خلاصه
انجام اعتبارسنجی داده ها برای تمیز، صحیح و کامل نگه داشتن مجموعه داده شما بسیار مهم است. اعتبارسنجی داده ها به شما این امکان را می دهد که خطاهای موجود در داده های خود را که به طور بالقوه می توانند به پروژه شما آسیب بزنند یا در غیر این صورت بر پروژه شما تأثیر بگذارند، حذف کنید. هنگام کار در مقیاس و با مقادیر زیاد داده، اعتبارسنجی اهمیت فزاینده ای پیدا می کند.
لاراول بسیاری از رویکردهای انعطاف پذیر را برای اطمینان از یکپارچگی و دقت داده های ارسال شده از طریق برنامه شما ارائه می دهد. شما میتوانید منطق اعتبارسنجی پیچیده را با روشهای استاندارد و سفارشی پیادهسازی کنید و پایگاه کد خود را به خوبی ساختار یافته و قابل استفادهتر کنید.
برنامه های Laravel خود را سریعتر با خدمات میزبانی برنامه Kinsta ارسال کنید.