入力ボックスにスペースのみがあるかどうかを検証しようとしています。Laravel検証用スペース文字は常に失敗しました
これは私の検証です:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use App\Rules\allAreSpaces;
class StoreUser extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|email|max:64',
'phone' => 'bail|required|numeric|phone_min|phone_max|unique:users|not_in:0',
'password' => [new allAreSpaces, 'required', 'min:8', 'max:16', 'confirmed'],
'password_confirmation' => 'required',
];
}
public function messages()
{
return [
'email.required' => 'Email address cannot be empty',
'email.email' => 'Enter a valid Email address',
'email.max' => 'Email address cannot exceed 64 characters',
'email.unique' => 'Email already exists',
'phone.required' => 'Mobile number cannot be empty',
'phone.numeric' => 'Mobile number has to be numeric',
'phone.phone_min' => 'Mobile number should contain a minimum 5 characters',
'phone.phone_max' => 'Mobile number cannot exceed 11 characters',
'phone.unique' => 'Mobile number already exists',
'phone.not_in' => 'Enter a valid mobile number ',
'password.required' => 'Password cannot be empty',
'password.min' => 'Password should contain minimum 8 characters',
'password.max' => 'Password cannot exceed 16 characters',
'password.confirmed' => 'Password mismatch.Retry',
'password_confirmation.required' => 'Confirm Password cannot be empty',
];
}
public function withValidator(Validator $validator)
{
$email = $this->request->get('email'); // Start with
$user = \App\User::Where('email', $email)->first();
if($user && $user->activated == 0){
$row = \App\User::find($user->id);
$row->delete();
}else{
$validator->sometimes('email', 'unique:users', function ($input) {
return true;
});
}
}
}
次は私が作成されたカスタムルールオブジェクトです:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class allAreSpaces implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
if(strlen($value) > 0){
if (strlen(trim($value)) == 0){
return false;
}
}
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Password cannot contain space character alone';
}
}
最初のは、「パスワードだけでは空白文字を含めることはできません」、帰国します。しかし、私はいくつかのスペースを入力し、それを提出すると、 'パスワードは空ではありません'と表示されます。しかし、タイプされた文字がスペースだけであれば、「パスワードはスペース文字だけを含むことはできません」としたい。
私は次のコードを使用しましたが、入力にスペースがある場合は表示されず、代わりに「パスワードは空ではありません」と表示されます。
public function passes($attribute, $value)
{
return false;
}
私はなぜそれが不思議でしたか?
私は、単一のルートの 'TrimStrings'と' ConvertEmptyStringsToNull'を削除することができます任意の方法はありますか? –
そのアプリケーション空間で 'TrimStrings'ミドルウェアのための' except'配列があります'password'と' password_confirm'が入っていなければなりません...もしそれが他のことができるのであれば – lagbox
'password'と 'password_confirm'がすでに入っています。 –