この$someVar = array(1,2,3,4,5)
のような整数の配列があります。 _$someVar
_を検証して、すべての要素が数値であることを確認する必要があります。どうすればよいですか?
単一値の変数の場合、検証ルールは次のようになることを知っています$rules = array('someVar'=>'required|numeric')
。配列_$someVar
_のすべての要素に同じルールを適用するにはどうすればよいですか?
助けてくれてありがとう。
Validator::extend('numericarray', function($attribute, $value, $parameters)
{
foreach($value as $v) {
if(!is_int($v)) return false;
}
return true;
});
これを使って
$rules = array('someVar'=>'required|numericarray')
現在laravelには、配列要素に条件を設定するオプションがあります。検証int配列のような単純なもののために独自のバリデーターを作成する必要はありません。これを使用してください(コントローラーで使用する場合)-
$validator = \Validator::make(compact('someVar'), [
'someVar' => 'required|array',
'someVar.*' => 'integer'
]);
$this->validateWith($validator);
または
$this->validate($request, [
'someVar' => 'array',
'someVar.*' => 'int'
]);
Laravel 5では、.*
を使用して配列内の要素を確認できます。これは、次のことを意味します。
$rules = array('someVar' => 'required|array',
'someVar.*' => 'integer')
新しい検証属性を追加することから始めます
Validator::extend('numeric_array', function($attribute, $values, $parameters)
{
if(! is_array($values)) {
return false;
}
foreach($values as $v) {
if(! is_numeric($v)) {
return false;
}
}
return true;
});
属性が配列でない場合、または1つの値が数値でない場合、関数はfalseを返します。次に、「app/lang/en /validation.php」にメッセージを追加します
"numeric_array" => "The :attribute field should be an array of numeric values",
配列の整数型値チェックのカスタムルールを追加できます
ファイルを開くだけ
/resources/lang/en/validation.php
ファイルの「承認済み」メッセージの前にカスタムメッセージを追加します。
'numericarray' => 'The :attribute must be numeric array value.',
"accepted" => "The :attribute must be accepted.",
ファイルを開きます
/app/Providers/AppServiceProvider.php
次に、ブート関数にカスタム検証を追加します。
public function boot()
{
$this->app['validator']->extend('numericarray', function ($attribute, $value, $parameters)
{
foreach ($value as $v) {
if (!is_int($v)) {
return false;
}
}
return true;
});
}
これで、numericarrayを使用して配列の整数型の値をチェックできます。
$this->validate($request, [
'field_name1' => 'required',
'field_name2' => 'numericarray'
]);
AppServiceProvider.php
Validator::extend('integer_array', function($attribute, $value, $parameters)
{
return Assert::isIntegerArray($value);
});
Assert.php
/**
* Checks wheter value is integer array or not
* @param $value
* @return bool
*/
public static function isIntegerArray($value){
if(!is_array($value)){
return false;
}
foreach($value as $element){
if(!is_int($element)){
return false;
}
}
return true;
}
値が配列であることを確認する「配列」検証のみがありますが、特定のケースでは、カスタムフィルターを作成する必要があります。
Laravel 3: http://three.laravel.com/docs/validation#custom-validation-rules
Laravel 4: http://laravel.com/docs/validation#custom-validation-rules