What is Laravel? Why should any PHP developer care about it?
A few days ago I had to present at a local PHP Meetup in Fullerton, CA. I spoke about Laravel framework and why it will be the future of PHP frameworks (and that future is already here).
Below I have that presentation from my talk and also the content of the slides typed up in text. Enjoy!
laravel
Clean and classy PHP framework
Presentation by Maks
What do I do
Breakdancer (4 years)
IT support (8 years)
Web Development (3 years)
Created Bootsnipp.com in 4 days with Laravel

WHY Another Framework?
-
Easy to start with
-
Free from spaghetti code
-
Eloquent syntax
-
Modularity (Bundles, now Composer)
-
Testability
-
Clean
-
Dependent
-
Eloquent ORM
-
Easy routing
-
Caching
-
Combines best of many worlds
-
Flexible MVC
-
MIT license
As @Rutger says
"With Laravel we can do it in one line."
Eloquent ORM
Uses prepared statements (SQL injection defense)
works with MySQL, PostgreSQL, SQLite, SQL Server
Example of actual usage:
class Company extends Eloquent {}
$company = Company::create(array(
'address' => '155 Harbor Blvd',
'city' => 'Fullerton'
));
$company = Company::find(1);
echo $company->address; // 155 Harbor Blvd
$company = Company::where('city', '=', "Fullerton")->first();
$companies = Company::order_by('city', 'desc')->take(10)->get();
Relationships
One to One
class Company extends Eloquent {
public function phone()
{
return $this->has_one('Phone');
}
}
$phone = Company::find(1)->phone;
Many to One
class Company extends Eloquent {
public function customers()
{
return $this->has_many('Customer');
}
}
$customers = Company::find(1)->customers;
Many to Many
Routing
Super easy
Route::get('/', function()
{
return "Hello PHP!";
});
Route::post('user', function()
{
//
});
Route::put('user/(:num)', function($id)
{
//
});
Route::delete('user/(:num)', function($id)
{
//
});
Routing #2
Controller Routing
Route::controller('company');
Route filters
Route::get('create', array('before' => 'auth|csrf', function()
{
//
}));
Authentication
Out of the box
$credentials = array('username' => 'example@gmail.com', 'password' => 'secret');
if (Auth::attempt($credentials))
{
return Redirect::to('user/profile');
}
Get user's info :
return Auth::user()->email;
Logout:
Auth::logout();
Blade templating engine
Kinda like PHP-ied HTML, ex:
@if ($tags)
<p class="lead">Tags matching the search:</p>
<ul class='nav nav-list'>
@foreach ($tags as $tag)
<li><a href="{{action('tags@view', array($tag->slug))}}"><span class="label">{{$tag->snipps()->count()}} snipps</span> {{$tag->name}} </a></li>
@endforeach
Environments
$environments = array(
'local' => array('http://localhost*', '*.dev'),
'staging' => array('http://dev.mywebsite.com*'),
'production' => array('http://mywebsite.com*'),
);
Then add environment specific config files under
application/config
application
- config
- staging
- database.php
- session.php
- production
- database.php
...
Done!
Bundles (now composer packages)
Don't reinvent the wheel...
Installation of bundles easy as :
php artisan bundle:install Mybundle

SOme cool packages:
-
Bootstrapper
-
Former
-
Oauth2 (12 service providers ready to go)
-
Mailgun
-
Mandrill
-
Hashids
-
Cartify (shopping cart ready to go)
Validation
$input = Input::all();
$rules = array(
'name' => 'required|min:3|max:32|alpha',
'age' => 'required|integer'
);
$v = Validator::make($input, $rules);
if( $v->fails() )
{
// code for validation failure :(
}
else
{
// code for validation success!
}
Artisan CLI
\# Application Configuration
key:generate Generate a secure application key.
# Database Tables
session:table Generate a migration for the sessions database table.
# Migrations
migrate:install Create the Laravel migration table.
migrate:make Create a migration.
migrate Run outstanding migrations.
migrate:rollback Roll back the most recent migration.
migrate:reset Roll back all migrations.
# Bundles
bundle:install Install a bundle.
bundle:upgrade Upgrade a bundle.
bundle:publish Publish all bundles' assets.
Artisan CLI #2
\# Unit Testing
test Run the application's tests.
# Routing
route:call Call a route.
# CLI Options
--env= Set the Laravel environment.
--database= Set the default database connection.
Community


IRC channel #laravel
@laravelphp

Near future
Laravel 4 hotness (PHP 5.3, 5.4, 5.5)
Composer packages
Unit tested everything
Thanks!


