Validasi data Laravel nambah kanthi aturan khusus
Ing pangembangan proyek piranti lunak, aturan validasi data minangka langkah dhasar sing njamin akurasi data input.
Nanging, kita kerep nemokake dhewe nggarap alat, utawa ing skenario sing aturan validasi terpadu ora cukup.
Sistem validasi data Laravel nduweni seperangkat aturan dhasar, sing bisa ditambah karo aturan khusus, sing ngidini kita nggawe logika validasi sing bisa digunakake maneh lan bisa diuji kanggo aplikasi kita.
Ayo ndeleng ing artikel iki carane nggawe lan nggunakake aturan validasi data khusus ing Laravel.
3 menit
Napa nggunakake aturan validasi data khusus?
L'uso di aturan di validasi data disesuaikan ing Laravel, nawakake sawetara kaluwihan:
- Bisa digunakake maneh sajrone aplikasi sampeyan
- Enkapsulasi logika validasi kompleks
- Tes luwih prasaja saka aturan
- Kode sing luwih resik, luwih bisa diwaca
Nggawe aturan validasi data khusus
Ayo nggawe siji aturan selaras kanggo validasi sandhi kompleks, lan kanggo nindakake iki, kita nggunakake printah ing ngisor iki:
php artisan make:rule StrongPassword
Sabanjure kita pindhah menyang ngatur cara passes()
ngendi kita nemtokake ing aturan di katrima, lan metode message()
ngendi kita nemtokake pesen kanggo ditampilake nalika aturan iku ora diajeni
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class StrongPassword implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
// Password must be at least 8 characters and contain at least one uppercase letter, one lowercase letter, and one number
return preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/', $value);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The :attribute must be at least 8 characters and contain at least one uppercase letter, one lowercase letter, and one number.';
}
}
Nggunakake aturan adat
Sampeyan bisa nggunakake iki aturan selaras ing panjalukan modul, ing controller utawa ing ngendi wae sampeyan mbukak validasi mbiyen. Ing ngisor iki aku menehi rong conto panggunaan aturan StrongPassword, loro ing panjalukan formulir ce nel controller.
use App\Rules\StrongPassword;
// In a form request
public function rules()
{
return [
'password' => ['required', new StrongPassword],
];
}
// In a controller
public function store(Request $request)
{
$request->validate([
'password' => ['required', new StrongPassword],
]);
// Process the validated data...
}
Techniques majeng
Aturan parameterized
Sampeyan bisa nggawe dhewe aturan pangaturan dhewe luwih fleksibel kanthi nrima paramèter. Ing conto sabanjure kita duwe a aturan kanggokatrima saka jumlah minimal "parameterized" tembung. Parameter "jumlah tembung" disetel ing metode konstruktor:
kelas MinWords ngleksanakake Aturan
{
pribadi $minWords;
fungsi publik __construct ($minWords)
{
$this->minWords = $minWords;
}
fungsi umum liwat ($atribut, $nilai)
{
return str_word_count($value) >= $this->minWords;
}
fungsi public message()
{
bali "Atribut: kudu ngemot paling ora {$this->minWords} tembung.";
}
}
// Panggunaan
'deskripsi' => ['dibutuhake', MinWords anyar(5)]
Nggunakake dependensi
Yen aturan sampeyan kudu sesambungan karo layanan liyane utawa database, sampeyan bisa nggunakake wadhah layanan Laravel:
kelas UniqueInOrganization ngleksanakake Aturan
{
pribadi $organisasi;
fungsi publik __construct($organisasi)
{
$this->organisasi = $organisasi;
}
fungsi umum liwat ($atribut, $nilai)
{
return !User::where('id_organisasi', $this->organization->id)
-> where($atribut, $value)
-> ana ();
}
fungsi public message()
{
bali 'Atribut : wis dijupuk ing organisasi sampeyan.';
}
}
Nguji aturan validasi data khusus
Salah sawijining kaluwihan utama aturan khusus yaiku gampang dites:
gunakake App\Rules\StrongPassword;
kelas StrongPasswordTest ngluwihi TestCase
{
/** @tes */
fungsi umum it_pass_for_strong_passwords()
{
$aturan = StrongPassword anyar;
$this->assertTrue($rule->pass('sandi', 'StrongPass1'));
$this->assertFalse($rule->pass('password', 'weakpass'));
}
}