簡體   English   中英

Laravel 5自定義表單驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM