我来自一个codeigniter背景(我知道有点过期)我在Laravel 5.2中创建自定义表单验证规则时遇到了一些小问题。 我检查的许多教程建议在路由文件中设置这样做并设置请求文件等,但我仍感到困惑。
我的需求非常简单。
我的产品类别包含子类别。 对于每个产品类别,都需要有一个默认子类别。 因此,在创建子类别时,我会勾选询问该子类别是否为默认类别。
如果已经创建的子类别被选为该类别的默认子类别,我需要表单验证器在子类别创建过程中的表单验证期间触发错误。
以下是我的代码中包含表单验证部分的部分。
$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上完成的。这是最佳做法吗?
答案 0 :(得分:0)
是的,form requests存在。您可以使用命令php artisan make:request CreateSubCategoryRequest
创建新的FormRequest,然后添加rules:
/**
* 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
字段,而不是在每个子类别本身。然后为默认子类别的主类别模型添加关系,并检查它是否为空。
答案 1 :(得分:0)
一如既往,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