Laravel'de Veri Doğrulama: Kullanışlı ve Güçlü
Yayınlanan: 2023-05-03Uygulamalarınızdaki verilerin geçerli, doğru olması ve tüm sistem gereksinimlerini karşılaması artık her zamankinden daha önemli. Veri tutarlılığını koruma ve güvenlik açıklarından kaçınma ihtiyacını ele alır.
Laravel, veri doğrulamayı kolay ve sezgisel hale getirir. Bir model görünümü denetleyicisi (MVC) mimarisini takip eder ve yalnızca PHP ve nesne yönelimli programlama (OOP) kavramları hakkında genel bilgi gerektirir. Ayrıca Laravel, gelen verileri doğrulamak için çeşitli yöntemler sunar.
Bu yaklaşımlardan bazılarını ve doğrulama kurallarını veri kümenize nasıl uygulayacağınızı keşfedin.
Laravel'de Veri Doğrulama Kolaylaştırıldı
Laravel, uygulamanızın kullanıcılarının formlar aracılığıyla veri göndermesi için birkaç kullanıma hazır doğrulama kuralı sağlar. Giriş alanlarını gerektiği gibi işaretleyebilir, minimum veya maksimum uzunluk belirleyebilir ve benzersiz (yinelenmeyen) girişler ve geçerli e-posta adresleri gerektirebilirsiniz. Laravel doğrulayıcı, girdinin bu kuralları veya belirttiğiniz diğer kuralları karşılayıp karşılamadığını kontrol eder.
Bu laravel doğrulama kuralları şunları içerir:
-
required
— Alan verileri boş veya boş olmamalıdır. -
array
— Alan verileri bir PHP dizisi olmalıdır. -
bail
— Doğrulama kuralı, ilk doğrulama hatasıyla karşılaştıktan sonra yürütmeyi durdurur. -
email
— Alan verileri geçerli bir e-posta adresi olmalıdır. -
unique
— Alan verilerinin veritabanı tablosunda kopyaları olmamalıdır.
Tüm doğrulama yöntemlerinin artıları ve eksileri vardır, ancak bunların çeşitliliği ihtiyaçlarınız için en iyi yaklaşımı seçmenizi sağlar. Seçtiğiniz yönteme bağlı olarak Laravel doğrulaması, manuel veya otomatik hata mesajlarıyla çeşitli şekillerde gerçekleşebilir.
En yaygın yöntem, gelen HTTP istekleri için kullanılan code>validate yöntemidir. Bu yöntem, doğrulama kurallarını yürüterek istek verilerine zincirlenir. Aşağıdaki örnekte görüldüğü gibi her alan için kuralları virgülle ayırabilirsiniz.
use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }
Burada email
gerekli bir girdidir, yani boş olamaz. Ek olarak, aynı e-posta adresinin iki kez kaydedilmediğinden emin olarak, users
veritabanı tablosunda benzersiz olmalıdır. Son kural, e-posta adresinin de geçerli olması gerektiğini belirtir. Aksi takdirde, doğrulama işlemi durur. Ad alanı zorunludur ancak başka kuralı yoktur.
Herhangi bir Laravel doğrulama kuralı başarısız olursa, otomatik olarak bir yanıt oluşturulur.
Doğrulama Temelleri
Doğrulama yöntemlerini daha iyi anlamak için aşağıdaki örneği inceleyin. Bitiş noktası için bir yol tanımlayacak ve istek verilerini doğrulamak ve işlemek için bir denetleyici oluşturacaksınız.
İlk olarak, kullanıcıların e-postalarını ve şifrelerini saklamasına izin veren basit bir uç nokta oluşturun.
Rotayı tanımlayın
Laravel rotaları, bir web uygulaması için route/web.php dosyasında veya bir API için route/api.php dosyasında tanımlanır. Bu örnek için api.php kullanın:
use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);
Denetleyiciyi Oluştur
Denetleyiciyi oluşturmak için bu Artisan komutunu çalıştırın:
php artisan make:controller UserController
Bu komut, app/Http/Controllers dizininde bir UserController.php dosyası oluşturur.
Şimdi, depolamadan önce mağaza uç noktasına giren verileri doğrulamak için bir store
yöntemi tanımlayın.
Bu örnek, bu kuralları kullanarak aşağıdaki alanları doğrulayacaktır:
- e-posta — Benzersiz, geçerli bir e-posta olmalı ve gerekli olmalıdır
- password — Minimum uzunluğa, parola onayına sahip olmalı ve gerekli olmalıdır
- yaş — Bir sayı olmalı ve gerekli olmalıdır
<?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
kural, kullanıcıların kayıt sırasında parolalarını yeniden girmeleri gibi verilerin doğru olduğunu doğrulamak için belirli bir alanı iki kez zorunlu tutmanıza olanak tanır. Bu kural, verileri parola alanıyla eşleşmesi gereken password_confirmation
adlı bir alan gerektirir.
Hata Mesajlarını Görüntüle
Doğrulama kriterleri karşılanırsa, kodunuz normal şekilde çalışmaya devam edecektir. Doğrulama başarısız olursa, bir IlluminateValidationValidationException
istisnası atılır ve uygun hata yanıtı döndürülür.
Örnek, JSON biçiminde bir 422 Unprocessable Entity
HTTP yanıtı döndüren bir API'ye dayanmaktadır. Web uygulamaları için, hata mesajını görüntülemek için önceki URL'ye yönlendirir ve istek verileri oturuma gönderilir.
Döndürülen hataları görüntülemek için görünümlerinizde $errors
değişkenini kullanabilirsiniz:
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Ayrıca yalnızca ilk hatayı görüntülemeyi veya hepsini görüntülemek için geçiş yapmayı seçebilirsiniz.
// Fetch all errors $errors->all() // Fetch only the first error $errors->first()
Formları Yeniden Doldur
Formları yeniden doldurmak, kullanıcıları bilgileri yeniden yazmaktan kurtarır, böylece hatayı düzeltmeye odaklanabilirler. Başarısız bir e-posta adresi örneğinde, name
alanı için eski değeri çağırarak formun geri kalanını yeniden doldurabilirsiniz.
$name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">
Önceki girdi yoksa bu kural null
döndürür.
Gelişmiş Doğrulama
Laravel, form istekleri adı verilen başka bir doğrulama yazma yöntemi sağlar. Bir form isteği, doğrulamaları düzenleyen ve denetleyicinizin dağınıklığını gideren özel bir istek sınıfıdır.
Büyük girdi hacimleri için uygun kendi doğrulama ve yetkilendirme mantığına sahiptirler ve doğrulama kurallarını tanımlamak ve hata mesajlarını özelleştirmek için kullanılabilirler.
Bir form isteği oluşturmak için bu Artisan komutunu çalıştırın:
php artisan make:request StoreUserRequest
Bu komut , app/Http/Requests dizininde bir StoreUserRequest.php dosyası oluşturur ve iki varsayılan yöntem içerir:
-
rules
istek verileri için doğrulama kuralları döndürür. -
authorize
kullanıcının istenen eylemi gerçekleştirme iznine sahip olup olmadığını belirtmek için bir boole değeri döndürür.
Bir form isteği kullanmak için önceki örneği dönüştürün.
<?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' ]; } }
Bu kuralların hata mesajlarını özelleştirmek için FormRequest
sınıfındaki mesajlar yöntemini geçersiz kılabilirsiniz.
/** * 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' ]; }
Not: Veri adı ve doğrulama kuralı, mesaj verisinden önce nokta (.) ile ayrılır.
Özel Doğrulama
Özel doğrulama oluşturmak için validate
yerine bir Validator
cephesi kullanabilirsiniz. Doğrulayıcı örneği iki argüman içerir: doğrulanacak veriler ve bir doğrulama kuralları dizisi. Bu iki bağımsız değişken, doğrulayıcı cephesinde ::make
yöntemine geçirilerek yeni bir doğrulayıcı örneği oluşturulur.
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 }
Otomatik bir doğrudan eklemek istiyorsanız, önceden var olan bir doğrulayıcı örneği üzerinde validate
yöntemini yürütebilirsiniz. Doğrulama başarısız olursa, bir XHR isteği, durum kodu olarak 422 Unprocessable Entity
ile bir JSON yanıtı üretir veya kullanıcı hemen yeniden yönlendirilir.
$validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();
Ayrıca, messages
adı verilen üçüncü bir bağımsız değişkeni Validate::make method
ileterek hata mesajlarınızı özelleştirebilirsiniz:
$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.', ]);
Not: :attribute
doğrulama altındaki alanın adıyla değiştirilir.
Özet
Veri doğrulama gerçekleştirmek, veri kümenizi temiz, doğru ve eksiksiz tutmak için çok önemlidir. Veri doğrulama, verilerinizdeki potansiyel olarak projenizi bozabilecek veya başka şekilde etkileyebilecek hataları ortadan kaldırmanıza olanak tanır. Doğrulama, ölçekte ve büyük miktarda veriyle çalışırken giderek daha önemli hale geliyor.
Laravel, uygulamanızdan geçen verilerin bütünlüğünü ve doğruluğunu sağlamak için çok sayıda esnek yaklaşım sağlar. Varsayılan ve özelleştirilebilir yöntemlerle karmaşık doğrulama mantığı elde edebilir, kod tabanınızı iyi yapılandırılmış ve daha kolay yeniden kullanılabilir hale getirebilirsiniz.
Kinsta'nın uygulama barındırma hizmetleriyle Laravel uygulamalarınızı daha hızlı gönderin.