Laravel 4 Uber-Quick-Start (With auth!) Guide

Here's how to get started really quickly with Laravel 4.

Updated on 6/4/2013 since this the official launch of Laravel.

Here's what we'll accomplish:

  1. Installing Composer locally or globally
  2. Creating your project with Composer
  3. File permissions
  4. Config (Dev environment)
  5. Database Config (User database)
  6. Auth
    • Routes
    • Form
    • Form submission
  7. ...
  8. Profit

Copy-Pasta Time!

Install composer locally:

$ curl -s | php

Alternatively, install composer globally (so it can be run from anywhere):

$ curl -sS | php
$ mv composer.phar /usr/local/bin/composer

Create a new Laravel project:

// Creates a new laravel project with latest stable inside of directory "myproject"
$ composer create-project laravel/laravel myproject


$ chmod -R 0777 app/storage
// This is simply setting your environment - bootstrap/start.php
$ find -name 'bootstrap/start.php' -print -exec sed -i 's/your-machine-name/localhost/g' {} \; # add machine-name to local env, for instance "localhost"
// MAC OSX FRIENDLY VERSION: find bootstrap -name 'start.php' -exec sed -i '' -e 's/your-machine-name/localhost/g' {} \;
// Set up a local environment
$ mkdir app/config/local
$ cp app/config/database.php app/config/local/database.php

Edit config/local/database.php :

# Edit config/local/database.php to suit your needs
# Don't forget to actually create that DB you specify :D

Database Migration Setup:

// Create a migration file for table "users", tell Laravel we need logic to create the table
$ php artisan migrate:make create_users_table --table=users --create

Due to new changes, we need to define which fields are fillable in our Users model. Edit app/models/User.php and add the "fillable" array:


use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

 * The database table used by the model.
 * @var string
protected $table = 'users';

 * The attributes excluded from the model's JSON form.
 * @var array
protected $hidden = array('password');

// Add to the "fillable" array
 protected $fillable = array('email', 'password');

// Rest of class cut-off for brevity

Edit app/database/migrations/SOME_DATE_create_users_table.php:

public function up()
	Schema::create('users', function(Blueprint $table)


Edit app/database/seeds/DatabaseSeeder.php:

public function run()

	// Uncomment this line

Create User Table seeder file:

$ touch app/database/seeds/UserTableSeeder.php

Edit app/database/seeds/UserTableSeeder.php:


class UserTableSeeder extends Seeder {

	public function run()

			'email' => '',
			'password' => Hash::make('your_password')

Create DB and seed it:

$ php artisan migrate --env=local
$ php artisan db:seed --env=local

Setup Auth filter and routes:

Edit app/filters.php:

Route::filter('auth', function()
	// Slight change to redirect to login route
	if (Auth::guest()) return Redirect::to('login');

Edit app/routes.php:

Route::get('/', array('before' => 'auth' ,function()
	return 'Hello, '.Auth::user()->email.'!';

Route::get('/login', function()
	return View::make('login');

Route::post('/login', function()
	// Validation? Not in my quickstart!
	// No, but really, I'm a bad person for leaving that out
	Auth::attempt( array('email' => Input::get('email'), 'password' => Input::get('password')) );
	return Redirect::to('/');

Create login view:

$ touch app/views/login.php

Edit app/views/login.php: Grab that here.

And you're pretty much done. Head to your localhost, get redirected to your login form, and try logging in!

You should see:


If you get an error try running:

$ chmod -R 0777 app/storage


The End