2016-07-29 17 views
0

私はcodeigniterのバックグラウンド(私は少し遅れていることがわかります)から来て、Laravel 5.2でカスタムフォームの検証ルールを作成する際に小さな問題があります。 私がチェックしたチュートリアルの多くは、ルートファイルやリクエストファイルなどの設定を示唆していましたが、まだ混乱しています。Laravel 5カスタムフォームの検証

私の必要性は非常に簡単です。

サブカテゴリを持つ商品カテゴリがあります。 製品カテゴリごとに、デフォルトのサブカテゴリが必要です。 サブカテゴリを作成するときに、そのサブカテゴリがデフォルトのカテゴリであるかどうかを確認するチェックがあります。

既に作成されたサブカテゴリがそのカテゴリのデフォルトのサブカテゴリとして選択されている場合、サブカテゴリ作成プロセスでフォーム検証中に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でフォームの検証が行われていることがわかりました。これはベストプラクティスですか?

+0

明確にするために、カテゴリのデフォルトとして新しいサブカテゴリがすでに存在することを検証する方法を尋ねていますか?メインカテゴリごとにデフォルトのサブカテゴリは1つだけですか?例えば、subcategory1がすでにmaincategory1にデフォルトであるが、新しいサブカテゴリ2に対して 'is_default'が選択されていれば、それは失敗するでしょうか? – Winter

+0

こんにちは、これは私のシナリオです –

答えて

0

はい、これにはform requestsが存在します。次に、あなたのrulesを追加し、コマンド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フィールドを割り当てる必要があります。次に、デフォルトのサブカテゴリのメインカテゴリモデルに関係を追加し、ヌルであるかどうかを確認します。

0

は、いつものようにlaravelのドキュメントは、あなたがどのように、どこであなたの要求を検証するために複数のオプションを持っているあなたの親友https://laravel.com/docs/5.2/validation#validation-quickstart

です。ベストプラクティスはユースケースによって異なります。

しかし、ほとんどの場合、特定のエンティティのリクエストタイプを作成するのが最善の方法でした。あなたは

はあなたがアプリ/ HTTP /要求内のファイルを見つけるでしょう
php artisan make:request CategoryRequest 
// or whatever your entity is called 

新しいreqestを作成するために、職人のコマンドを使用することができます。 あなたはちょうどあなたがあなたのAppServiceProvider.php

public function boot() 
{ 
    // custom rule 
    Validator::extend('foo', function($attribute, $value, $parameters, $validator) { 
     return $value == 'foo'; 
    }); 
} 

カスタム検証ルールでこれを置くことができるカスタムルールを作成するには

return [ 
    'category' => 'required|min:5' 
]; 

を検証する必要があなたのルールを貼り付けることができ、ルールの機能があります。https://laravel.com/docs/5.2/validation#custom-validation-rules

関連する問題