a cheat sheet for Laravel 4
Artisan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
php artisan --help OR -h php artisan --quiet OR -q php artisan --version OR -V php artisan --no-interaction OR -n php artisan --ansi php artisan --no-ansi php artisan --env // -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debugphp artisan --verbose php artisan changes php artisan clear-compiled php artisan down php artisan dump-autoload php artisan env php artisan help php artisan list php artisan migrate php artisan optimize php artisan routes php artisan serve php artisan tinker php artisan up php artisan workbench php artisan asset:publish [--bench[="vendor/package"]] [--path[="..."]] [package] php artisan auth:reminders-table php artisan cache:clear php artisan command:make name [--command[="..."]] [--path[="..."]] [--namespace[="..."]] php artisan config:publish php artisan controller:make [--bench="vendor/package"] php artisan db:seed [--class[="..."]] [--database[="..."]] php artisan key:generate php artisan migrate [--bench="vendor/package"] [--database[="..."]] [--path[="..."]] [--package[="..."]] [--pretend] [--seed] php artisan migrate:install [--database[="..."]] php artisan migrate:make name [--bench="vendor/package"] [--create] [--package[="..."]] [--path[="..."]] [--table[="..."]] php artisan migrate:refresh [--database[="..."]] [--seed] php artisan migrate:reset [--database[="..."]] [--pretend] php artisan migrate:rollback [--database[="..."]] [--pretend] php artisan queue:listen [--queue[="..."]] [--delay[="..."]] [--memory[="..."]] [--timeout[="..."]] [connection] php artisan queue:subscribe [--type[="..."]] queue url php artisan queue:work [--queue[="..."]] [--delay[="..."]] [--memory[="..."]] [--sleep] [connection] php artisan session:table php artisan view:publish [--path[="..."]] package php artisan tail [--path[="..."]] [--lines[="..."]] [connection] |
Composer
1 2 3 4 5 |
composer create-project laravel/laravel folder_name composer install composer update composer dump-autoload [--optimize] composer self-update |
Routing
1 2 3 4 |
Route::get('foo', function(){}); Route::get('foo', 'ControllerName@function'); Route::controller('foo', 'FooController'); Route::resource('posts',' 'PostsController'); |
Triggering Errors
1 2 3 |
App::abort(404); App::missing(function($exception){}); throw new NotFoundHttpException; |
Route Parameters
1 2 |
Route::get('foo/{bar}', function($bar){}); Route::get('foo/{bar?}', function($bar = 'bar'){}); |
HTTP Verbs
1 2 3 4 5 6 |
Route::any('foo', function(){}); Route::post('foo', function(){}); Route::put('foo', function(){}); Route::patch('foo', function(){}); Route::delete('foo', function(){}); // RESTful actionsRoute::resource('foo', 'FooController'); |
Secure Routes
1 |
Route::get('foo', array('https', function(){})); |
Route Constraints
1 2 3 4 |
Route::get('foo/{bar}', function($bar){}) ->where('bar', '[0-9]+'); Route::get('foo/{bar}/{baz}', function($bar, $baz){}) ->where(array('bar' => '[0-9]+', 'baz' => '[A-Za-z]')) |
1 |
// Set a pattern to be used across routesRoute::pattern('bar', '[0-9]+') |
Filters
1 2 3 4 5 6 7 |
// Declare an auth filterRoute::filter('auth', function(){}); // Register a class as a filterRoute::filter('foo', 'FooFilter'); Route::get('foo', array('before' => 'auth', function(){})); // Routes in this group are guarded by the 'auth' filterRoute::get('foo', array('before' => 'auth', function(){})); Route::group(array('before' => 'auth'), function(){}); // Pattern filterRoute::when('foo/*', 'foo'); // HTTP verb patternRoute::when('foo/*', 'foo', array('post')); |
Named Routes
1 2 |
Route::currentRouteName(); Route::get('foo/bar', array('as' => 'foobar', function(){})); |
Route Prefixing
1 |
// This route group will carry the prefix 'foo'Route::group(array('prefix' => 'foo'), function(){}) |
Sub-Domain Routing
1 |
// {sub} will be passed to the closureRoute::group(array('domain' => '{sub}.example.com'), function(){}); |
URLs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
URL::full(); URL::current(); URL::previous(); URL::to('foo/bar', $parameters, $secure); URL::action('FooController@method', $parameters, $absolute); URL::route('foo', $parameters, $absolute); URL::secure('foo/bar', $parameters); URL::asset('css/foo.css', $secure); URL::secureAsset('css/foo.css'); URL::isValidUrl('http://example.com'); URL::getRequest(); URL::setRequest($request); URL::getGenerator(); URL::setGenerator($generator); |
Events
1 2 3 4 5 6 7 8 9 10 11 |
Event::fire('foo.bar', array($bar)); Event::listen('foo.bar', function($bar){}); Event::listen('foo.*', function($bar){}); Event::listen('foo.bar', 'FooHandler', 10); Event::listen('foo.bar', 'BarHandler', 5); Event::listen('foor.bar', function($event){ return false; }); Event::queue('foo', array($bar)); Event::flusher('foo', function($bar){}); Event::flush('foo'); Event::forget('foo'); Event::subscribe(new FooEventHandler); |
Database
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
DB::connection('connection_name'); DB::statement('drop table users'); DB::listen(function($sql, $bindings, $time){ code_here; }); DB::transaction(function(){ transaction_code_here; }); // Cache a query for $time minutesDB::table('users')->remember($time)->get(); // Escape raw inputDB::raw('sql expression here'); Selects DB::table('name')->get(); DB::table('name')->distinct()->get(); DB::table('name')->select('column as column_alias')->get(); DB::table('name')->where('name', '=', 'John')->get(); DB::table('name')->whereBetween('column', array(1, 100))->get(); DB::table('name')->whereIn('column', array(1, 2, 3))->get(); DB::table('name')->whereNotIn('column', array(1, 2, 3))->get(); DB::table('name')->whereNull('column')->get(); DB::table('name')->whereNotNull('column')->get(); DB::table('name')->groupBy('column')->get(); DB::table('name')->orderBy('column')->get(); DB::table('name')->having('count', '>', 100)->get(); DB::table('name')->skip(10)->take(5)->get(); DB::table('name')->first(); DB::table('name')->pluck('column'); DB::table('name')->lists('column'); // JoinsDB::table('name')->join('table', 'name.id', '=', 'table.id') ->select('name.id', 'table.email'); |
Inserts, Updates, Deletes
1 2 3 4 5 6 7 8 9 10 11 |
DB::table('name')->insert(array('name' => 'John', 'email' => 'john@example.com')); DB::table('name')->insertGetId(array('name' => 'John', 'email' => 'john@example.com')); // Batch insertDB::table('name')->insert( array('name' => 'John', 'email' => 'john@example.com') array('name' => 'James', 'email' => 'james@example.com') ); // Update an entryDB::table('name')->where('name', '=', 'John') ->update(array('email' => 'john@example2.com')); // Delete everything from a tableDB::table('name')->delete(); // Delete specific recordsDB::table('name')->where('id', '>', '10')->delete(); DB::table('name')->truncate(); |
Aggregates
1 2 3 4 5 6 7 8 9 |
DB::table('name')->count(); DB::table('name')->max('column'); DB::table('name')->min('column'); DB::table('name')->avg('column'); DB::table('name')->sum('column'); DB::table('name')->increment('column'); DB::table('name')->increment('column', $amount); DB::table('name')->decrement('column'); DB::table('name')->decrement('column', $amount); |
Raw Expressions
1 2 |
DB::select('select * from users where id = ?', array('value')); DB::table('name')->select(DB::raw('count(*) as count, column2'))->get(); |
Eloquent
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Model::create(array('key' => 'value')); // Fill a model with an array of attributes, beware of mass assignment!Model::fill($attributes); Model::destroy(1); Model::all(); Model::find(1); // Find using dual primary keyModel::find(array('first', 'last')); // Throw an exception if the lookup failsModel::findOrFail(1); // Find using dual primary key and throw exception if the lookup failsModel::findOrFail(array('first', 'last')); Model::where('foo', '=', 'bar')->get(); Model::where('foo', '=', 'bar')->first(); // Throw an exception if the lookup failsModel::where('foo', '=', 'bar')->firstOrFail(); Model::where('foo', '=', 'bar')->count(); Model::where('foo', '=', 'bar')->delete(); Model::whereRaw('foo = bar and cars = 2', array(20))->get(); Model::remember(5)->get(); Model::remember(5, 'cache-key-name')->get(); Model::on('connection-name')->find(1); Model::with('relation')->get(); Model::all()->take(10); Model::all()->skip(10); |
Soft Delete
1 2 3 4 |
Model::withTrashed()->where('cars', 2)->get(); Model::withTrashed()->where('cars', 2)->restore(); Model::where('cars', 2)->forceDelete(); Model::onlyTrashed()->where('cars', 2)->get(); |
Events
1 2 3 4 5 6 7 8 9 |
Model::creating(function($model){}); Model::created(function($model){}); Model::updating(function($model){}); Model::updated(function($model){}); Model::saving(function($model){}); Model::saved(function($model){}); Model::deleting(function($model){}); Model::deleted(function($model){}); Model::observe(new FooObserver); |
Eloquent Configuration
1 2 3 |
Eloquent::unguard(); // Disables mass assignment exceptions from being thrown from model inserts and updatesEloquent::reguard(); // Renables any ability to throw mass assignment exceptions |
The Remote Component
Executing Commands
1 2 3 4 5 6 |
SSH::run(array $commands); SSH::into($remote)->run(array $commands); // specify remote, otherwise assumes default SSH::run(array $commands, function($line) { echo $line.PHP_EOL; }); |
Tasks
1 2 3 4 |
SSH::define($taskName, array $commands); // define SSH::task($taskName, function($line) // execute{ echo $line.PHP_EOL; }); |
SFTP Uploads
1 2 |
SSH::put($localFile, $remotePath); SSH::putString($string, $remotePath); |
Schema
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Schema::create('table', function($table) { $table->increments('id'); }); // Specify a ConnectionSchema::connection('foo')->create('table', function($table){}); Schema::rename($from, $to); Schema::drop('table'); Schema::dropIfExists('table'); Schema::hasTable('table'); Schema::hasColumn('table', 'column'); // Update an existing tableSchema::table('table', function($table){}); $table->renameColumn('from', 'to'); $table->dropColumn(string|array); $table->engine = 'InnoDB'; // Only work on MySQL$table->string('name')->after('email'); |
Indexes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$table->string('column')->unique(); $table->primary('column'); // Creates a dual primary key$table->primary(array('first', 'last')); $table->unique('column'); $table->unique('column', 'key_name'); // Creates a dual unique index$table->unique(array('first', 'last')); $table->unique(array('first', 'last'), 'key_name'); $table->index('column'); $table->index('column', 'key_name'); // Creates a dual index$table->index(array('first', 'last')); $table->index(array('first', 'last'), 'key_name'); $table->dropPrimary('table_column_primary'); $table->dropUnique('table_column_unique'); $table->dropIndex('table_column_index'); |
Foreign Keys
1 2 3 |
$table->foreign('user_id')->references('id')->on('users'); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->dropForeign('posts_user_id_foreign'); |
Column Types
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$table->increments('id'); $table->bigIncrements('id'); $table->string('email'); $table->string('name', 100); $table->integer('votes'); $table->bigInteger('votes'); $table->smallInteger('votes'); $table->float('amount'); $table->double('column', 15, 8); $table->decimal('amount', 5, 2); $table->boolean('confirmed'); $table->date('created_at'); $table->dateTime('created_at'); $table->time('sunrise'); $table->timestamp('added_on'); $table->timestamps(); $table->softDeletes(); $table->text('description'); $table->binary('data'); $table->enum('choices', array('foo', 'bar')); $table->morphs('parent'); // Adds INTEGER parent_id and STRING parent_type->nullable() ->default($value) ->unsigned() |
Input
1 2 3 4 5 6 |
Input::get('key'); // Default if the key is missingInput::get('key', 'default'); Input::has('key'); Input::all(); // Only retrieve 'foo' and 'bar' when getting inputInput::only('foo', 'bar'); // Disregard 'foo' when getting inputInput::except('foo'); |
Session Input (flash)
1 2 3 4 |
// Flash input to the sessionInput::flash(); Input::flashOnly('foo', 'bar'); Input::flashExcept('foo', 'baz'); Input::old('key','default_value'); |
Files
1 2 3 4 5 6 7 8 9 |
// Use a file that's been uploadedInput::file('filename'); // Determine if a file was uploadedInput::hasFile('filename'); // Access file propertiesInput::file('name')->getRealPath(); Input::file('name')->getClientOriginalName(); Input::file('name')->getClientOriginalExtension(); Input::file('name')->getSize(); Input::file('name')->getMimeType(); // Move an uploaded fileInput::file('name')->move($destinationPath); // Move an uploaded fileInput::file('name')->move($destinationPath, $fileName); |
Cache
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Cache::put('key', 'value', $minutes); Cache::add('key', 'value', $minutes); Cache::forever('key', 'value'); Cache::remember('key', $minutes, function(){ return 'value' }); Cache::rememberForever('key', function(){ return 'value' }); Cache::forget('key'); Cache::has('key'); Cache::get('key'); Cache::get('key', 'default'); Cache::get('key', function(){ return 'default'; }); Cache::increment('key'); Cache::increment('key', $amount); Cache::decrement('key'); Cache::decrement('key', $amount); Cache::section('group')->put('key', $value); Cache::section('group')->get('key'); Cache::section('group')->flush(); |
Cookies
1 2 3 4 5 |
Cookie::get('key'); // Create a cookie that lasts for everCookie::forever('key', 'value'); // Set a cookie before a response has been createdCookie::queue('key', 'value', 'minutes'); // Send a cookie with a response$response = Response::make('Hello World'); $response->withCookie(Cookie::make('name', 'value', $minutes)); |
Sessions
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Session::get('key'); Session::get('key', 'default'); Session::get('key', function(){ return 'default'; }); Session::put('key', 'value'); // Push a value into an array in the sessionSession::push('foo.bar','value'); Session::all(); Session::has('key'); Session::forget('key'); Session::flush(); Session::regenerate(); Session::flash('key', 'value'); Session::reflash(); Session::keep(array('key1', 'key2')); |
Requests
1 2 3 4 5 6 7 8 |
Request::path(); Request::is('foo/*'); Request::url(); Request::segment(1); Request::header('Content-Type'); Request::server('PATH_INFO'); Request::ajax(); Request::secure(); |
Responses
1 2 3 4 5 6 7 8 9 10 11 12 |
return Response::make($contents); return Response::make($contents, 200); return Response::json(array('key' => 'value')); return Response::json(array('key' => 'value')) ->setCallback(Input::get('callback')); return Response::download($filepath); return Response::download($filepath, $filename, $headers); // Create a response and modify a header value$response = Response::make($contents, 200); $response->header('Content-Type', 'application/json'); return $response; // Attach a cookie to a responsereturn Response::make($content) ->withCookie(Cookie::make('key', 'value')); |
Redirects
1 2 3 4 5 6 7 8 9 10 11 12 13 |
return Redirect::to('foo/bar'); return Redirect::to('foo/bar')->with('key', 'value'); return Redirect::to('foo/bar')->withInput(Input::get()); return Redirect::to('foo/bar')->withInput(Input::except('password')); return Redirect::to('foo/bar')->withErrors($validator); return Redirect::back(); return Redirect::route('foobar'); return Redirect::route('foobar', array('value')); return Redirect::route('foobar', array('key' => 'value')); return Redirect::action('FooController@index'); return Redirect::action('FooController@baz', array('value')); return Redirect::action('FooController@baz', array('key' => 'value')); // If intended redirect is not defined, defaults to foo/bar.return Redirect::intended('foo/bar'); |
IoC
1 2 3 4 5 6 7 8 |
App::bind('foo', function($app){ return new Foo; }); App::make('foo'); // If this class exists, it's returnedApp::make('FooBar'); App::singleton('foo', function(){ return new Foo; }); App::instance('foo', new Foo); App::bind('FooRepositoryInterface', 'BarRepository'); App::register('FooServiceProvider'); // Listen for object resolutionApp::resolving(function($object){}); |
Security
Passwords
1 2 3 |
Hash::make('secretpassword'); Hash::check('secretpassword', $hashedPassword); Hash::needsRehash($hashedPassword); |
Auth
1 2 3 4 5 6 7 8 9 10 11 12 |
// Check if the user is logged inAuth::check(); Auth::user(); Auth::attempt(array('email' => $email, 'password' => $password)); // 'Remember me' by passing true to Auth::attempt()Auth::attempt($credentials, true); // Log in for a single requestAuth::once($credentials); Auth::login(User::find(1)); Auth::loginUsingId(1); Auth::logout(); Auth::validate($credentials); Auth::basic('username'); Auth::onceBasic(); Password::remind($credentials, function($message, $user){}); |
Encryption
1 2 3 4 |
Crypt::encrypt('secretstring'); Crypt::decrypt($encryptedString); Crypt::setMode('ctr'); Crypt::setCipher($cipher); |
1 2 3 4 5 6 |
Mail::send('email.view', $data, function($message){}); Mail::send(array('html.view', 'text.view'), $data, $callback); Mail::queue('email.view', $data, function($message){}); Mail::queueOn('queue-name', 'email.view', $data, $callback); Mail::later(5, 'email.view', $data, function($message){}); // Write all email to logs instead of sendingMail::pretend(); |
Messages
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// These can be used on the $message instance passed into Mail::send() or Mail::queue()$message->from('email@example.com', 'Mr. Example'); $message->sender('email@example.com', 'Mr. Example'); $message->returnPath('email@example.com'); $message->to('email@example.com', 'Mr. Example'); $message->cc('email@example.com', 'Mr. Example'); $message->bcc('email@example.com', 'Mr. Example'); $message->replyTo('email@example.com', 'Mr. Example'); $message->subject('Welcome to the Jungle'); $message->priority(2); $message->attach('foo\bar.txt', $options); // This uses in-memory data as attachments$message->attachData('bar', 'Data Name', $options); // Embed a file in the message and get the CID$message->embed('foo\bar.txt'); $message->embedData('foo', 'Data Name', $options); // Get the underlying Swift Message instance$message->getSwiftMessage(); |
Queues
1 2 3 4 5 6 7 |
Queue::push('SendMail', array('message' => $message)); Queue::push('SendEmail@send', array('message' => $message)); Queue::push(function($job) use $id {}); php artisan queue:listen php artisan queue:listen connection php artisan queue:listen --timeout=60 php artisan queue:work |
Validation
1 2 3 4 5 6 7 8 9 10 |
Validator::make( array('key' => 'Foo'), array('key' => 'required|in:Foo') ); Validator::extend('foo', function($attribute, $value, $params){}); Validator::extend('foo', 'FooValidator@validate'); Validator::resolver(function($translator, $data, $rules, $msgs) { return new FooValidator($translator, $data, $rules, $msgs); }); |
Rules
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
accepted active_url after:YYYY-MM-DD before:YYYY-MM-DD alpha alpha_dash alpha_num between:1,10 confirmed date date_format:YYYY-MM-DD different:fieldname email exists:table,column image in:foo,bar,baz not_in:foo,bar,baz integer numeric ip max:value min:value mimes:jpeg,png regex:[0-9] required required_if:field,value required_with:foo,bar,baz required_without:foo,bar,baz same:field size:value unique:table,column,except,idColumn url |
author : Jesse O’Brien