Please note that this chapter was written for VERSION 3 of the Laravel PHP Framework.
Now that we know how to create forms, we need to learn how to handle the input that has been sent by them. As always, Laravel has provided an ultra clean way of dealing with your input data. No need to interact with PHP arrays such as
$_FILES. Let's be honest, those look ugly.
Let's use the Input class to handle this instead.
<?php $panda = Input::get('panda');
Now we have a Panda! Great.. we have too many already. Due to an unfortunate welsh border breach, Wales is now infested with red pandas. They are everywhere, I'm using one as a footrest right now. How did you think Emma managed to snap up that cover shot, they come from China!
Anyway, let's get back on track. One thing that you need to remember about the
get() method on the
Input class is that it doesn't refer to
$_GET data. You will see that
get() is simply a nice and expressive short method name for retrieving all kinds of data. The
Input class also responds to
get() with all kinds of request data, including
If a piece of request data isn't set, the Input class will return a
null value. If you pass a second parameter to the
get() method and the index doesn't exist then the method will return the second parameter instead. This means that you can use it without worrying about any
undefined errors popping up. Very useful!
<?php $panda = Input::get('panda', 'Muffin');
Now if our panda doesn't have a name it will be called 'Muffin', awwww..
If you would like to retrieve the entire request array, just skip the index. Easy as that.
<?php $morepandas = Input::get();
By default the
get() array won't includes values from the
$_FILES array. However if you use
all() instead of
get() it will contain files too.
<?php $pandas_and_files = Input::all();
If you would like to check if a piece of post data exists without actually returning it, simply use the elegant and highly expressive
has() method which will return a boolean result.
<?php $do_we_have_a_panda = Input::has('panda');
To access an element from the
$_FILES array, make a call to the
Input::file() method, for example..
<?php $file = Input::file('spoon');
If you would like to retrieve a file attribute then add a period and an attribute key to the first parameter, for example to retrieve the file size..
$size = Input::file('spoon.size');
Once again, calling the method without a parameter will retrieve the full array of files.
* Note: You can use this syntax to access all multi dimensional arrays. Simply use a period to denote a nested array index. *
$files = Input::file();
Flash data is a useful method of storing data in the session for use in the next request. It can be a useful way to repopulate forms.
flash all of the current request data to the session, for it to be accessible in the next request, simply use the
If you only want to flash a portion of the current request data, just pass 'only' as the first parameter to the method and an array of field names that you wish
flashed as the second parameter.
<?php Input::flash('only', array('betty', 'simon'));
Now we will take Betty and Simon with us to the next request. Alternatively we could specify a list of fields that we don't want to take with us using the
except option, for example..
<?php Input::flash('except', array('uncle_bob'));
There, now we can leave Uncle Bob behind, he's an arrogant soul, and dislikes our new national animal the red panda.
Now we can use the standard
Redirect::to() method to move to a new request. From here we can use the expressive
Input::old() method to retrieve a value that has been
flashed from a previous request.
<?php $betty = Input::old('betty');
As you can see, Betty has survived the transition. You can think of flash data as those fuzzy transporter pads from Star Trek, moving Kirk and his buddies from one request to the next.
Once again you can skip the parameter to return a full array of flash data.
<?php $people = Input::old();
You can use the
had() method to see if an index of flash data exists.
Of course not, we hate Uncle Bob.
Laravel wouldn't be the framework it is without its wonderful short-cuts and expressive methods. Let's have a look at a prime example of this in action.
<?php return Redirect::to('party')->with_input();
with_input() method will flash all of our request data for us, it also accepts the same
except methods as our
<?php return Redirect::to('party')->with_input('only', array('betty', 'simon')); return Redirect::to('party')->with_input('except', array('uncle_bob'));
Now that you have access to form data, your applications will become much more interactive!
My books are available online for free to encourage learning. However, if you'd like for me to keep writing, then please consider buying a digital copy over at Leanpub.com.
It's available in PDF, ePub, and Kindle format, and contains a bunch of extras that you won't find on the site. I have a full-time job, and I write my books in my spare time. Please consider buying a copy so that I can continue to write new books from the comfort of my sofa!