Jone
Jone

Reputation: 27

laravel 4.1 Validator Same rule Error

i have an error while i try to Validate 2 password field in my project

this is my controller

public function showReg()
{
    return View::make('reg');
}
public function addUser()
{


$uname = Input::get('uname');
$f_name = Input::get('name');
$pass = Input::get('pass');
$pass2 = Input::get('pass2');
$hashed = Hash::make($pass);
$hashed2 = Hash::make($pass2);


$val_uname = Validator::make(
    array('User Name' => $uname),
    array('User Name' => 'required|max:20|min:4')

);
$val_fname = Validator::make(
    array('First Name' => $f_name),
    array('First Name' =>'required|max:20|min:4')
    );
$val_pass = Validator::make(
    array('Password' => $pass),
    array('Password' => 'required|min:6|max:8')

);
$val_pass2 = Validator::make(
    array('Password confimation' => $pass2),
    array('Password confimation' => 'required|min:6|max:8|same:pass')

);



if ($val_uname->fails())
{
    return Redirect::to('reg')->withErrors($val_uname);
}
if ($val_fname->fails()) 
{
    return Redirect::to('reg')->withErrors($val_fname);
}
if ($val_pass->fails()) 
{
    return Redirect::to('reg')->withErrors($val_pass);
}
if ($val_pass2->fails()) 
{
    return Redirect::to('reg')->withErrors($val_pass2);
}



$user_data = new User;
$user_data->uname = $uname;
$user_data->name = $f_name;
$user_data->pass = $hashed;
$user_data->save();

return Redirect::to('sucess');
}


    }

and here is my view code

        @extends('master')


    @section('main')
    {{--  the Forms to post the information to database to create a user --}}

    {{ Form::open(array('url' => 'reg')) }}
    {{  Form::label('uname', 'User Name : ')     }}
    {{  Form::text('uname') }}
    <br>
    {{  Form::label('name', 'First Name : ')     }}
    {{  Form::text('name')  }}
    <br>
    {{  Form::label('pass', 'Password : ')   }}
    {{  Form::Password('pass')  }}
    <br>
    {{  Form::label('pass2', 'Password confirmation : ')     }}
    {{  Form::Password('pass2') }}
    <br>
    {{  Form::submit('Submit')  }}

    {{ Form::close()}}

    {{  $errors->first() }}




    @endsection

and my Error the i get

The Password confimation and pass must match.

i dont know where is the wrong section in my code

thanks for @Sam due to his help and support

Upvotes: 0

Views: 2486

Answers (2)

Sudhir Bastakoti
Sudhir Bastakoti

Reputation: 100195

you could try following way:

...
$uname = Input::get('uname');
$f_name = Input::get('name');
$pass = Input::get('pass');
$pass2 = Input::get('pass_confirmation');
$hashed = Hash::make($pass);
$hashed2 = Hash::make($pass2);
...


$rules = array(
    'uname' => 'required|max:20|min:4',
    'name'  => 'required|max:20|min:4',
    'pass'  => 'required|min:6|max:8|confirmed',
    'pass_confirmation' => 'required|min:6|max:8|same:pass'
);
$v = Validator::make($input, $rules);

if( $v->fails() ) {
    $messages = $v->getMessages()->all();    
}
else {
    //validation passed
}

The Confirmed rule ensures that, for a given attribute, a matching attribute_confirmation attribute exists. And change your html for confirm password to:

{{  Form::label('pass2', 'Password confirmation : ')     }}
{{  Form::Password('pass_confirmation') }}

Upvotes: 2

SUB0DH
SUB0DH

Reputation: 5240

You don't need to have different validators for validating different fields. You can do it with a single validator. You're validating Password Confirmation with same:pass but there is no field pass in the validator.

A less complex version of the code:

function addUser()
{
    $uname = Input::get('uname');
    $f_name = Input::get('name');
    $pass = Input::get('pass');
    $pass2 = Input::get('pass2');
    $hashed = Hash::make($pass);
    $hashed2 = Hash::make($pass2);

    $input = array(
            'uname' => $uname,
            'name'  => $f_name,
            'pass'  => $pass,
            'pass2' => $pass2
        );

    $rules = array(
            'uname' => 'required|max:20|min:4',
            'name'  => 'required|max:20|min:4',
            'pass'  => 'required|min:6|max:8',
            'pass2' => 'required|min:6|max:8|same:pass'
        );

    $validator = Validator::make($input, $rules);

    if ($validator->fails()) {
        return Redirect::to('reg')->withErrors($validator);
    }

    $user_data = new User;
    $user_data->uname = $uname;
    $user_data->name = $f_name;
    $user_data->pass = $hashed;
    $user_data->save();

    return Redirect::to('sucess');
}

Upvotes: 0

Related Questions