2016-07-29 3 views
0

Я исхожу из фона codeigniter (я знаю немного просрочен), и у меня есть небольшая проблема при создании правил проверки правильности формы в Laravel 5.2. Многие из проверок, которые я проверил, предложили сделать это в файле маршрута и настроить файл запроса и т. Д., Но я все еще запутался.Laravel 5 custom form validation

Моя потребность очень проста.

У меня есть категории товаров, которые имеют подкатегории. Для каждой категории товаров должна существовать подкатегория по умолчанию. Итак, при создании подкатегорий у меня есть галочка, спрашивающая, является ли эта подкатегория стандартной категорией.

Мне нужен валидатор формы, чтобы вызвать ложь во время проверки формы в процессе создания подкатегории, если уже выбранная подкатегория была выбрана в качестве подкатегории по умолчанию для этой категории.

Ниже приведена часть моего кода, содержащего раздел проверки формы.

$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

Чтобы уточнить, вы спрашиваете, как вы можете подтвердить, что новая подкатегория уже существует по умолчанию для категории? Только одна подкатегория по умолчанию для основной категории? Например, если подкатегория1 уже по умолчанию для maincategory1, но 'is_default' отмечен для новой подкатегории2, вы хотите, чтобы она завершилась неудачей? – Winter

+0

Привет, Да, это точно мой сценарий –

ответ

0

Да, form requests есть для этого. Вы можете создать новый СформироватьЗапрос с командой php artisan make:request CreateSubCategoryRequest, затем добавить свой 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 вашей основной категории, а не на каждую подкатегорию. Затем добавьте отношение к модели основной категории для подкатегории по умолчанию и проверьте, является ли она нулевой.

0

Как всегда Laravel документы являются лучшим другом https://laravel.com/docs/5.2/validation#validation-quickstart

У вас есть несколько вариантов о том, как и где, чтобы подтвердить свой запрос. Лучшая практика зависит от вашего использования.

Однако для меня главным образом создание типа запроса для специфического объекта было лучшим. Вы можете использовать команду мастеровой, чтобы создать новую reqest

php artisan make:request CategoryRequest 
// or whatever your entity is called 

Вы найдете файл в приложении/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