Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Getting Started With Laravel 4
Search
Christopher Pitt
April 04, 2014
Technology
1.1k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Getting Started With Laravel 4
Christopher Pitt
April 04, 2014
More Decks by Christopher Pitt
See All by Christopher Pitt
Making Robots (PHP Unicorn Conf)
chrispitt
1
250
Transforming Magento (NomadMage 2017)
chrispitt
2
140
Forget What You Know
chrispitt
1
180
Monads In PHP → php[tek]
chrispitt
3
590
Breaking The Enigma → php[tek]
chrispitt
0
290
Turn on the Generator!
chrispitt
0
210
Implementing Languages (FluentConf)
chrispitt
1
390
Async PHP (Sunshine)
chrispitt
0
540
Helpful Robot
chrispitt
0
180
Other Decks in Technology
See All in Technology
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
150
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
380
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
220
20年間 SNS サービス「GREE」 を支えた技術の刷新と、長期運用サービスの Kubernetes へのリアーキテクト
gree_tech
PRO
0
110
Metadata - Section 2: Simple Metadata & Meta Tags
mohab1
0
100
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
380
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
170
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
130
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
340
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
210
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
120
フィンテック養成勉強会#68
finengine
0
190
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
540
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
540
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Thoughts on Productivity
jonyablonski
76
5.4k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Accessibility Awareness
sabderemane
1
250
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
530
Optimizing for Happiness
mojombo
378
71k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
500
Transcript
getting started with laravel 4
about me ! ›❯ i live in cape town ›❯
i work for http://n.joepublic.co.za ›❯ i love programming ›❯ i have written a book on mvc framework development ›❯ i am finishing a book on laravel applications
the disclaimers ! ›❯ much of this is my opinion
›❯ i have a vested interest in the success of laravel
laravel ! ›❯ laravel is an mvc framework ›❯ laravel
installs with composer ›❯ laravel uses 24 community packages (11 from symfony)
artisan ! ›❯ artisan is a command-line utility ›❯ artisan
ships with laravel 4 ›❯ artisan automates complicated and laborious tasks
// terminal ! ›❯ php artisan env Current application environment:
production ! ›❯ php artisan down Application is now in maintenance mode.
// continued... ! ›❯ php artisan Laravel Framework version 4.1.24
! Usage: [options] command [arguments] ...
routes ! ›❯ routes link a url to a function
›❯ routes are specified by request method
// app/routes.php ! Route::get("products", function() { return "show the products";
}); ! Route::post("product", function() { return "save the product"; });
// terminal ! ›❯ php artisan serve Laravel development server
started on http://localhost:8000 ! ›❯ curl -X GET "http://localhost:8000/products" show the products
// app/routes.php ! Route::get("product/{id}", function($id) { return "show the product
{$id}"; }); ! Route::get("category/{id?}", function($id = 1) { return "save the category {$id}"; });
// continued... ! Route::get("user/{id}", function($id) { return "show the user
{$id}"; })->where("id", "[a-z]+");
// continued... ! Route::pattern("product_id", "[0-9]+"); ! Route::get("product/{product_id}", function($product_id) { return
"show the product {$product_id}"; }); ! Route::get("product/{product_id}/images", function($product_id) { return "show the product images for {$product_id}"; });
// terminal ! ›❯ curl -X GET "http://localhost:8000/bridge/gimly" run, fools
! ›❯ curl -X GET "http://localhost:8000/bridge/balrog" YOU SHALL NOT PASS
views ! ›❯ views are where php meets html ›❯
views can be plain php ›❯ blade is a template engine
// app/routes.php ! Route::get("/", function() { return View::make("hello"); });
// app/views/hello.php ! <!doctype html> <html lang="en"> <head> <meta charset="UTF-8">
<title>Laravel PHP Framework</title> ...
// app/routes.php ! Route::get("products", function() { return View::make("products/index"); });
// app/views/products/index.php ! <div class="products"> show the products </div>
// app/routes.php ! Route::get("products", function() { $products = [ ["the
red one", 12.99], ["the blue one", 13.99], ["the black one", 11.99] ]; ! return View::make("products/index", compact("products")); });
// app/views/products/index.php ! <div class="products"> <?php foreach ($products as $product):
?> <div class="product"> <?php echo $product[0]; ?> <span class="price"><?php echo $product[1]; ?></span> </div> <?php endforeach; ?> </div>
// app/views/products/index.blade.php ! <div class="products"> @foreach ($products as $product) <div
class="product"> {{ $product[0] }} <span class="price">{{ $product[1] }}</span> </div> @endforeach </div>
// continued... ! @extends("layout") ... ! @section("content") ... @stop
// app/views/layout.blade.php ! @yield("content", "default") ... ! @include("includes/header") ...
controllers ! ›❯ controllers connect data to views ›❯ controllers
redirect requests ›❯ controllers shouldn't be doing much more than that
// terminal ! ›❯ php artisan controller:make UsersController Controller created
successfully! ! ›❯ php artisan controller:make PostsController Controller created successfully! ! ›❯ php artisan controller:make TagsController Controller created successfully!
// app/controllers/UsersController.php ! class UsersController extends \BaseController { ... }
// app/routes.php ! Route::get("users", [ "as" => "users.index", "uses" =>
"UsersController@index" ]);
migrations ! ›❯ migrations are scripted database changes ›❯ migrations
have a special dsl ›❯ migrations need to be run
// terminal ! ›❯ php artisan migrate:make create_posts_table Created Migration:
2014_04_01_025625_create_posts_table Generating optimized class loader ! ›❯ php artisan migrate:make create_users_table Created Migration: 2014_04_01_025631_create_users_table Generating optimized class loader
// continued... ! ›❯ php artisan migrate:make create_tags_table Created Migration:
2014_04_01_025656_create_tags_table Generating optimized class loader ! ›❯ php artisan migrate:make create_posts_tags_table Created Migration: 2014_04_01_025701_create_posts_tags_table Generating optimized class loader
// app/database/migrations/[timestamp]_create_users_table.php ! use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; ! class CreatePostsTable
extends Migration { ... }
// continued... ! Schema::create("users", function(Blueprint $table) { $table->increments("id"); $table->string("username"); $table->string("password");
$table->string("email"); $table->timestamps(); });
// terminal ! ›❯ php artisan migrate Migration table created
successfully. Migrated: 2014_04_01_025625_create_posts_table Migrated: 2014_04_01_025631_create_users_table Migrated: 2014_04_01_025656_create_tags_table Migrated: 2014_04_01_025701_create_users_tags_table
seeders ! ›❯ seeders are scripted database populators ›❯ seeders
can insert as much or as little data as required ›❯ seeders need to be run
// app/database/seeds/DatabaseSeeder.php ! class DatabaseSeeder extends Seeder { ... }
// continued... ! public function run() { $this->call("UsersTableSeeder"); }
// app/database/seeds/UsersTableSeeder.php ! DB::table("users")->insert([ [ "username" => "chrispitt", "password" =>
Hash::make("password"), "email" => "
[email protected]
", "created_at" => time(), "updated_at" => time() ] ]);
// terminal ! ›❯ php artisan db:seed Seeded: UsersTableSeeder
query builder ! ›❯ query builder builds sql queries ›❯
query builder has its own dsl
eloquent ! ›❯ eloquent is a programmatic wrapper for database
tables ›❯ eloquent is best for single instances
authentication ! ›❯ authentication is about blocking the wrong users
and allowing the right ones ›❯ authentication needs a special eloquent model ›❯ alternatives exist
thanks ! ›❯ follow http://twitter.com/followchrisp ›❯ learn http://tutorials.io ______ <
moo! > ------ \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||