Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
240
Transforming Magento (NomadMage 2017)
chrispitt
2
140
Forget What You Know
chrispitt
1
180
Monads In PHP → php[tek]
chrispitt
3
580
Breaking The Enigma → php[tek]
chrispitt
0
270
Turn on the Generator!
chrispitt
0
190
Implementing Languages (FluentConf)
chrispitt
1
380
Async PHP (Sunshine)
chrispitt
0
530
Helpful Robot
chrispitt
0
170
Other Decks in Technology
See All in Technology
証券システムを10年Scalaで作り続けるということ - 関数型まつり2026
krrrr38
3
740
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
140
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
2
160
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
0
140
Baseline対応のDOMの型定義を作った
uhyo
3
720
どうして今サーバーサイドKotlinを選択したのか
nealle
0
210
SRE Lounge Hiroshimaへの招待
grimoh
0
400
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
1.5k
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
3
3k
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
1
220
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
1
520
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
12
4.9k
Featured
See All Featured
Faster Mobile Websites
deanohume
310
32k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
490
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
170
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
630
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Tell your own story through comics
letsgokoyo
1
990
Google's AI Overviews - The New Search
badams
0
1.1k
Bash Introduction
62gerente
615
220k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
Side Projects
sachag
455
43k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
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 | || ||