【问题标题】:Laravel : All validation rules fail alwaysLaravel:所有验证规则总是失败
【发布时间】:2015-04-04 18:42:08
【问题描述】:

我正在尝试使用 User::$rules 验证检索到的表单,并且验证总是返回失败,并显示所有必需的字段!当我死并在控制器中转储Input::All() 时,我得到了提交表单时提供的所有输入字段,这意味着问题出在模型中,对吗?我从来没有遇到过这么奇怪的问题!请帮忙

控制器:用户控制器

public function postSinscrire() {

    $validator = Validator::make(Input::all(), User::$rules);


    if($validator->passes())  {
        $user = new User;
        $user->email = Input::get('email');
        $user->email_confirmation = Input::get('email_confirmation');
        $user->number = Input::get('number');
        $user->pseudo = Input::get('pseudo');
        $user->banned_user = 0;
        $user->activation_email = 0;
        $user->activation_number = 0;
        $user->sex = Input::get('sex');
        $user->birth = Input::get('birth');
        $user->wilaya_code = Input::get('wilaya_code');
        $user->user_type = 1;
        $user->password = hash::make(Input::get('password'));
        $user->password_confirmation('password_confirmation');
        $user->save();

        return Redirect::to('membre')
            ->with('message', 'Welcome');
    }
    if($validator->failed()) {
            return Redirect::to('membre/sinscrire')
                ->with('message','Une erreur s\'est produise, Corrigez puis réessayez a nouveau')
                ->withErrors($validator)
                ->withInput();
            }

型号:用户

 protected $hidden = array('password', 'remember_token');

    protected $fillable = array(

        'email','number','pseudo','sex','birth','wilaya_code',

        );

    public static $rules = array(

        'email'=>'max:254|unique:users|email|required',
        'email_confirmation'=>'max:254|unique:users|email|required',
        'number'=>'between:8,15|unique:users',
        'pseudo'=>'max:35|unique:users|required|alpha_num',
        'banned_user'=>'boolean|integer',
        'activation_email'=>'boolean|integer',
        'activation_number'=>'boolean|integer',
        'sex'=>'boolean|integer|required',
        'birth'=>'required|date',
        'wilaya_code'=>'integer|required|max:2',
        'activation_date'=>'date',
        'user_type'=>'integer',
        'password'=>'required|between:8,12|alpha_num|confirmed',
        'password_confirmation'=>'required|between:8,12|alpha_num'

        );

然后我得到所有字段所需的错误!

  • 电子邮件字段为必填项。
  • 电子邮件确认字段为必填项。
  • 伪字段是必需的。
  • 性别字段是必需的。
  • 出生字段是必需的。
  • wilaya 代码字段是必需的。
  • 密码字段为必填项。
  • 密码确认字段为必填项。

更新:查看

{{ Form::open(array(
    'url'=>'membre/sinscrire',
    'method'=>'POST'
    )) }}

<label for="email">Email :</label>
{{ Form::text('email')}} <br>

<label for="email_confirmation">Email :</label>
{{ Form::text('email_confirmation')}} <br>

<label for="pseudo">Identifiant ( pseudo ) :</label>
{{ Form::text('pseudo')}} <br> 

<label for="password">Mot de passe :</label>
{{ Form::password('password')}} <br>

<label for="password_confirmation">Confirmation :</label>
{{ Form::password('password_confirmation')}} <br>

<label for="gender">Sexe :</label>
{{ Form::select('gender',array('0'=>'Homme', '1'=>'Femme'))}} <br>

<label for="sana_hilwa">Date de naissance :</label>
{{ Form::selectRange('year', 1930, 2011); }}
{{ Form::selectRange('month', 01, 12); }}
{{ Form::selectRange('day', 01, 31); }} <br>

<label for="al_wilaya">Wilaya :</label>
{{ Form::select('al_wilaya', array(
            '1' => 'Adrar',
            '2' => 'Chlef',
            '31' => 'Oran'
    )) }} <br>

En cliquant sur “Je m'inscris”, vous indiquez que vous avez lu, compris et accepté les <a href="/apropos"><strong>conditions d\'utilisation</strong></a> de Ouedkniss. <br>

{{ Form::submit('Inscrivez vous')}}

{{ Form::close()}}

当我dd('Input::all');

array (size=11)
  '_token' => string 'mCVboVC123456789nDpOJZXyjiY5YsUrjRMGunPx' (length=40)
  'email' => string 'foo@bar.com' (length=11)
  'email_confirmation' => string 'foo@bar.com' (length=11)
  'pseudo' => string 'foo' (length=3)
  'password' => string 'testpass' (length=8)
  'password_confirmation' => string 'testpass' (length=8)
  'gender' => string '0' (length=1)
  'year' => string '1930' (length=4)
  'month' => string '1' (length=1)
  'day' => string '1' (length=1)
  'al_wilaya' => string '1' (length=1)

注意:从视图中出生字段未正确完成

我希望只获得所需的出生字段,如果这是问题,任何与 Carbon 兼容的视图脚本? 谢谢

更新:DD('User::$rules');

array (size=14)
  'email' => string 'required|max:254|email|unique:users|confirmed' (length=45)
  'email_confirmation' => string 'required|max:254|email|unique:users' (length=35)
  'number' => string 'between:8,15|unique:users' (length=25)
  'pseudo' => string 'required|alpha_num|max:35|unique:users' (length=38)
  'banned_user' => string 'boolean|integer' (length=15)
  'activation_email' => string 'boolean|integer' (length=15)
  'activation_number' => string 'boolean|integer' (length=15)
  'sex' => string 'required|boolean|integer' (length=24)
  'birth' => string 'required|date' (length=13)
  'wilaya_code' => string 'required|max:2|integer' (length=22)
  'activation_date' => string 'date' (length=4)
  'user_type' => string 'integer' (length=7)
  'password' => string 'required|between:8,12|alpha_num|confirmed' (length=41)
  'password_confirmation' => string 'required|between:8,12|alpha_num' (length=31)

【问题讨论】:

  • 你在dd(Input::all());得到了什么?
  • Input::get('email ') 包含一个空格,我认为您在 html 表单中也这样做了,但在 rules 中却没有。
  • @Razor 代码中没有空格,对不起,我在这里犯了错误
  • @Deena 我在更新后发布了我的 Blade Form 检查
  • 在 Laravel 中,验证规则按照指定的顺序运行。我不确定实际的实现,但是从您给定的验证错误来看,Laravel 似乎要求“必需”规则在任何其他规则之前位于规则字符串的第一个位置。用“required|....”更新你的规则,看看它是否能解决你的问题。

标签: php forms laravel laravel-4 laravel-validation


【解决方案1】:

仔细检查您的验证规则。

 'email'=>'max:254|unique:users|email|required',
 'email_confirmation'=>'max:254|unique:users|email|required'
 'number'=>'between:8,15|unique:users',

如果您正在更新并使用以前的电子邮件或号码,验证将始终失败。

如果是这种情况,在您更新之前,请先获取您的电子邮件和电话号码,并根据输入数据检查它们。如果它们与现有数据匹配,则不要对这些字段使用验证规则,否则使用这些验证规则。

【讨论】:

  • 我提到了“唯一”规则,即使我提供了现有数据,我也会等待一个唯一的例外而不是必需的,无论如何,所有字段都需要表单返回!,好吧,我会的在检查 User::$rules 之前检查输入的唯一性
  • 更新时要通过的“唯一”规则,与用户id一起使用,即'max:254|unique:users,'.$this->user()->id 我用Auth 因此用户已经在请求中,您可能有另一种获取用户的方式。如果电子邮件是不同对象的一部分,则使用您保存它的对象的 ID。
猜你喜欢
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 2019-12-23
  • 2016-05-13
  • 2016-01-18
  • 1970-01-01
相关资源
最近更新 更多