官术网_书友最值得收藏!

Validating user input

In most web applications, there will be certain form fields that are required to process the form. We also want to be sure that all the e-mail addresses are formatted correctly, or the input must have a certain number of characters. Using Laravel's Validator class, we can check for these rules and let the user know if something is not correct.

Getting ready

For this recipe, we just need a standard installation of Laravel.

How to do it...

To complete this recipe, follow these steps:

  1. Create a route to hold the form:
    Route::get('userform', function()
    {
        return View::make('userform');
    });
  2. Create a view named userform.php and add a form:
    <h1>User Info</h1>
    <?php $messages =  $errors->all('<pstyle="color:red">:message</p>') ?>
    <?php
    foreach ($messages as $msg)
    {
        echo $msg;
    }
    ?>
    <?= Form::open() ?>
    <?= Form::label('email', 'Email') ?>
    <?= Form::text('email', Input::old('email')) ?>
    <br>
    <?= Form::label('username', 'Username') ?>
    <?= Form::text('username', Input::old('username')) ?>
    <br>
    <?= Form::label('password', 'Password') ?>
    <?= Form::password('password') ?>
    <br>
    <?= Form::label('password_confirm', 'Retype your Password')?>
    <?= Form::password('password_confirm') ?>
    <br>
    <?= Form::label('color', 'Favorite Color') ?>
    <?= Form::select('color', array('red' => 'red', 'green' =>'green', 'blue' => 'blue'), Input::old('color')) ?>
    <br>
    <?= Form::submit('Send it!') ?>
    <?php echo Form::close() ?>
  3. Create a route that handles our POST data and validates it:
    Route::post('userform', function()
    {
        $rules = array(
            'email' => 'required|email|different:username',
            'username' => 'required|min:6',
            'password' => 'required|same:password_confirm'
        );
        $validation = Validator::make(Input::all(), $rules);
    
        if ($validation->fails())
        {
            return Redirect::to('userform')-
                >withErrors($validation)->withInput();
        }
    
        return Redirect::to('userresults')->withInput();
    
    });
    
  4. Create a route to handle a successful form submission:
    Route::get('userresults', function()
    {
        return dd(Input::old());
    });

How it works...

In our form page, we begin by checking if there are any errors and displaying them if found. Inside the error, we can set the default style for each error message. We also have the option of checking for and displaying errors for individual fields using $errors->get('email'). The $errors variable is automatically created by Laravel if it detects a flashed error.

Next, we create our form. In the last parameter of the form elements, we're getting Input::old(), which we use to store the previous input if the validation happens to fail. That way, the user won't need to keep filling out the entire form.

We then create a route where the form is POSTed, and set up our validation rules. In this case, we use the required rule for email, username, and password, to make sure something is typed into those fields.

The email field also gets the email rule, which uses PHP's built-in FILTER_VALIDATE_EMAIL filter of the filter_var function. The email field must also not be the same as the username field. The username field uses the size validation to check for at least six characters. Then the password field checks the value of the password_confirm field and makes sure they're the same.

Then, we create the validator and pass in all of the form data. If any of those rules aren't met, we navigate the user back to the form, and also send back any validation error messages as well as the original form input.

If the validation passes, we go to the next page using Laravel's dd() helper function, which uses var_dump() to show the form values on the page.

See also

  • The Creating a simple form recipe
主站蜘蛛池模板: 瑞丽市| 兴城市| 普安县| 荥经县| 弥勒县| 聂荣县| 西畴县| 年辖:市辖区| 丰镇市| 长寿区| 镇康县| 新郑市| 资兴市| 永修县| 南投市| 凭祥市| 安新县| 庆云县| 金寨县| 阿克苏市| 涟源市| 平阳县| 岚皋县| 北安市| 松桃| 上栗县| 六盘水市| 湖州市| 沙河市| 怀集县| 积石山| 克拉玛依市| 清镇市| 衡东县| 漾濞| 伊通| 偏关县| 大埔县| 曲水县| 开江县| 宜川县|