2016-04-24 8 views
0

私は、ユーザーが自分のデータを編集できる多くの異なる場所をアプリケーションに用意しています。具体的には、登録から始め(ユーザー名の長さを確認するなどのフィールドが必要な場合など)、ログイン時にデータを確認して(ユーザー名の長さを再度確認して)フォームを検証する必要があります。さらに、プロフィールを編集しているときに、ユーザー名などの最大文字数を確認する必要があります。これはほんの始まりに過ぎません。私が管理パネルを持っているなら、私はそれを行う必要があります。モデレートパネル、私はそこでそれを行う必要があります。ユーザー名だけではなく、フルネーム、アバターURLなどでも構いません。Laravelフォーム検証ルールの複製を防止する

登録にはログイン時に約4つのフィールドがあり、ユーザーアカウントには2つしかないため、リクエストファイルを1つ作成できません10のようになります。したがって、すべてのシナリオで要求ファイルが異なる必要があります。

ただし、ユーザー名などの検証ルールはx文字である必要があり、英数字である必要があります。また、パスワードは最大x文字などでなければなりません。これは、すべての異なる要求ファイルにわたって非常に反復的です。

すべての検証ルールを重複せずにこの問題を最もよく並べ替えるにはどうすればよいですか?

コード例:

// LoginRequest.php 

public function rules() 
{ 
    return [ 
     'username' => 'required|max:16|min:6', 
     'password' => 'required|max:16|min:6|alphanumeric' 
    ]; 
} 

// UserAccountSettingsRequest 

public function rules() 
{ 
    return [ 
     'username' => 'required|max:16|min:6|alphanumeric', 
     'email' => 'required|email', 
     'name'  => 'required|max:100|min:2', 
     'password' => 'required|max:16|min:6', 
     'avatar' => 'required|max:256' 
    ]; 
} 

// RegistrationRequest 

public function rules() 
{ 
    return [ 
     'username' => 'required|max:16|min:6|alphanumeric', 
     'name'  => 'required|max:100|min:2', 
     'email' => 'required|email', 
     'password' => 'required|max:16|min:6', 
    ]; 
} 

あなたが見ることができるように、私は多くのルールを何度も繰り返していました。どうすればこれを防ぐことができますか?

ありがとうございます!

答えて

1

でそれを使用します。

<?php 
namespace App\Helpers; 

class ValidationRulesBuilder 
{ 
    private static $validation_rules_preset = ["username" => "required|max:16|min:6|alphanumeric", "name" => 'required|max:100|min:2', 'email' => 'required|email', 'password' => 'required|max:16|min:6']; 

    public static function buildValidationRules($fields) 
    { 
     $ret = []; 
     foreach ($fields as $field) { 
      $pos = strpos($field, '|'); 
      if ($pos !== false) { 
       $ret[$field] = self::$validation_rules_preset[substr($field,0,$pos)]. substr($field, $pos); 
      } else { 
       $ret[$field] = self::$validation_rules_preset[$field] ; 
      } 
     } 
     return $ret; 
    } 
} 

は、それを使用します。

public function rules() 
    { 
     return (\App\Helpers\ValidationRulesBuilder::buildValidationRules(['username|min:5|custom-validation','password'])); 
    } 

デフォルトのルールはで、デフォルトルールはusernameです。"min:5|custom-validation"

+0

大変ありがとうございます。 –

+0

あなたは歓迎です:) – Kevin

0

php array_merge()機能の使用を検討してください。

一般的な検証ルールを新しいファイルにリファクタリングし、composer.jsonとcomposer dump-autoloadを使用してオートロードすることができます。 (PSR4の自動ロード)

例えば、validation_rules.phpに、あなたが書くことができます。

$validation_rules_user_pwd=['username' => 'required|max:16|min:6|alphanumeric','password' => 'required|max:16|min:6']; 

をあなたはそれを使用する必要がある場合、あなたはさらにそれをプッシュする

public function rules() 
{ 
    return array_merge($validation_rules_user_pwd,[ 
       'email' => 'required|email', 
       'name' => 'required|max:100|min:2|, 
       'avatar' => 'required|max:256 
      ]); 
} 

を行うことができ、あなたがかもしれません文字列の配列を取り込み、関連配列を返すヘルパー関数を作成します。

など。その後

<?php 
namespace App\Helpers; 

class ValidationRulesBuilder 
{ 
    private static $validation_rules_preset = ["username" => "required|max:16|min:6|alphanumeric", "name" => 'required|max:100|min:2', 'email' => 'required|email', 'password' => 'required|max:16|min:6']; 

    public static function buildValidationRules($fields) 
    { 
     $ret = []; 
     foreach ($fields as $field) { 
      $ret[$field] = self::$validation_rules_preset[$field]; 
     } 
     return $ret; 
    } 
} 

、ちょうど例えば、ビルド機能にいくつかの変更を行い、追加の規則を可能にするため

public function rules() 
    { 
     return (\App\Helpers\ValidationRulesBuilder::buildValidationRules(['username','password'])); 
    } 
+0

ありがとうございます。ヘルパーに追加ルールを渡したい場合はどうでしょうか? 'return buildValidationRules(['username | min:3'])のように?私は、追加で追加したい時代には?関係なく –

関連する問題