[英]Laravel 5 custom form validation
我來自codeigniter背景(我知道有點過期),並且在Laravel 5.2中創建自定義表單驗證規則時遇到了小問題。 我檢查過的許多教程都建議在路由文件和設置請求文件等中這樣做,但我仍然感到困惑。
我的需求很簡單。
我有包含子類別的產品類別。 對於每個產品類別,需要有一個默認子類別。 因此,在創建子類別時,我會打勾詢問該子類別是否為默認類別。
如果已經創建的子類別已被選擇為該類別的默認子類別,則我需要表單驗證器在子類別創建過程中的表單驗證期間觸發false。
以下是我的代碼部分,其中包含表單驗證部分。
$attributeNames = array(
'category_id' => 'UOM Category Name',
'sub_category_name' => 'Sub Category Name',
'is_default' => 'Default'
);
$validator = Validator::make($request->all(), [
'category_id' => 'required',
'sub_category_name' => 'required|unique:sub_categories,sub_category_name',
'is_default' => 'required', //POSSIBLE TRIGGER GOES HERE. In CI the a custom function name went here
]);
$validator->setAttributeNames($attributeNames);
if ($validator->fails()) {
$response = new Response();
return $response->setStatusCode(400, $validator->errors());
} else {
//proceed with store
}
對不起,英語不好。 另外,我已經看到表單驗證是在FormRequest上完成的。 這是最佳做法嗎?
是的,為此存在表單請求 。 您可以使用命令php artisan make:request CreateSubCategoryRequest
創建一個新的FormRequest,然后添加規則 :
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'category_id' => 'required|exists:categories,id', // If you're making sure the parent category ID exists
'sub_category_name' => 'required|unique:sub_categories,sub_category_name',
'is_default' => 'required|boolean'
];
}
對於默認子類別驗證,我相信您要問的是如何驗證父類別是否已經具有默認子類別(每個主類別僅允許1個默認子類別)。 在這種情況下,您應該將default_subcategory_id
字段分配給您的主類別記錄,而不是每個子類別本身。 然后將一個關系添加到默認子類別的主類別模型,並檢查其是否為空。
與往常一樣,laravel文檔是您最好的朋友https://laravel.com/docs/5.2/validation#validation-quickstart
關於如何以及在何處驗證請求,您有多種選擇。 最佳實踐取決於您的用例。
但是,對我來說,最好是為特定實體創建請求類型。 您可以使用artisan命令創建新要求
php artisan make:request CategoryRequest
// or whatever your entity is called
您將在app / Http / Requests中找到該文件。 您具有規則功能,您可以在其中粘貼需要驗證的規則
return [
'category' => 'required|min:5'
];
要創建自定義規則,可以將其放在AppServiceProvider.php中
public function boot()
{
// custom rule
Validator::extend('foo', function($attribute, $value, $parameters, $validator) {
return $value == 'foo';
});
}
自定義驗證規則: https : //laravel.com/docs/5.2/validation#custom-validation-rules
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.