- Laravel Application Development Cookbook
- Terry Matula
- 462字
- 2021-07-23 15:33:33
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:
- Create a route to hold the form:
Route::get('userform', function() { return View::make('userform'); });
- 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() ?>
- 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(); });
- 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