SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Introduction to Laravel 4
Benson Liang
What will be discussed


Introduction



Installation



The MVC Layers



Authentication



IoC Container



Facade



Service Provider
Introduction


The Creator



Objectives of Laravel



The Base



Closures



The Syntactic Sugar
Introduction – The Creator

Taylor Otwell
.NET Developer
Introduction – Objectives of Laravel


Get started on a project FAST



Fun to develop with



Promote S.O.L.I.D design patterns


Singe Responsibility Principle (SRP)



Open/Closed Principle (OCP)



Liskov Substitution Principle (LSP)



Interface Segregation Principle (ISP)



Dependency Inversion Principle (DIP)
Introduction – The Base


Composer friendly



Symfony components



Swiftmailer



Monolog



... and many more
Introduction - Closures


Introduced in PHP 5.3



Anonymous functions



Useful for specifying callbacks
Route::get(
'/login',
'AuthController@showLoginForm'
);
Route::get('/login', function() {
return View::make('auth.loginForm');
});
Introduction – The Syntactic Sugar


Easy to understand



Expressiveness and elegance
Auth::attempt()
Input::get()
Cookie::make()
Event::subscribe()
Installation

composer create-project laravel/laravel /web/laraveltest --no-dev --prefer-dist
The MVC Layers
●

Eloquent ORM

●

Blade Engine

●

Controller
The MVC Layers – Eloquent ORM
●

Active record style

●

Easy to use

class Book extends Eloquent
{
protected $table = 'book';
protected $primaryKey = 'book_id';
public $timestamps = false;
}
The MVC Layers – Eloquent ORM
●

Some examples of queries:
Book::all();
Book::find(1);
Book::where('name', '=', 'Michael Cheng');

●

Insert / Update
$b = new Book();
$b->title = 'Laravel Basics';
$b->description = 'A very nice book';
$b->save();
$b = Book::find(2);
$b->title = 'Laravel Advanced';
$b->save();
The MVC Layers – Eloquent ORM
●

Relationship mapping
public function author()
{
return $this->belongsTo('Author', 'author_id');
}
The MVC Layers – Eloquent ORM
●

Supports soft delete
protected $softDelete = true;
// Automatically excludes soft deleted rows
Book::all();
// Include soft deleted rows
Book::withTrashed()->get();
// Include only soft deleted rows
Book::onlyTrashed()->get();
// Undo the soft delete
$b = Book::withTrashed()->where('book_id, '=', 1);
$b->restore();
The MVC Layers – Eloquent ORM
●

Supports query scope
public function scopePopular($query)
{
return $query->where('rating', '>', '4');
}
Book::popular()->get();
The MVC Layers – Eloquent ORM
●

Supports accessors and mutators
// Accessor
public function getGenderAttribute($value)
{
return ($value == 'm') ? 'Male' : 'Female';
}
// Mutator
public function setNameAttribute($value)
{
$this->attributes['name'] = strtolower($value);
}
The MVC Layers – Blade Engine
●

Stock templating engine for Laravel

●

Supports template inheritance and sections
<html>
<head>
<title>@yield('page_title')</title>
@yield('css')
@yield('javascript')
</head>
<body>
Some text
@yield('content')
</body>
</html>
The MVC Layers – Blade Engine
@extends('layout')
@section('page_title', 'Login Page')
@section('css')
<link rel="stylesheet" type="text/css" href="mystyle.css" />
@endsection
@section('javascript')
<script type='text/javascript' src='jquery.js'></script>
@endsection
@section('content')
This is the content for a particular page.
@endsection
The MVC Layers – Blade Engine
●

Some control structures
@if (.....)
....
@elseif ....
@else ....
@endif

@unless (....)
....
@endunless
The MVC Layers – Blade Engine
@for (....)
....
@endfor

@while (....)
....
@endwhile
@foreach (....)
....
@endforeach
The MVC Layers – Blade Engine
●

Alternate way to echo variable values
My name is <?php echo $user->name ?>
My name is {{ $user->name }}
The MVC Layers - Controller
●

Basic controller
// The controller itself
class AuthController extends BaseController
{
public function showLoginForm()
{
return View::make('auth.loginForm');
}
}
// Routing file
Route::get('/auth', 'AuthController@showLoginForm')
The MVC Layers - Controller
●

RESTful controller
// The controller itself
class BookController extends BaseController
{
public function getShowAll()
{
// ..............
}
public function postAdd()
{
// ..............
}
}
// Routing file
Route::controller('/books', 'BookController');
The MVC Layers - Controller


Resource controller
–

Generated using Artisan CLI

–

Allows easy RESTful implementation
The MVC Layers - Controller


Resource controller


Paths and route names are generated automatically
Verb

Path

Action

Route Name

GET

/resource

index

resource.index

GET

/resource/create

create

resource.create

POST

/resource/

store

resource.store

GET

/resource/{id}

show

resource.show

GET

/resource/{id}/edit edit

resource.edit

PUT / PATCH

/resource/{id}

update

resource.update

DELETE

/resource/{id}

destroy

resource.destroy
The MVC Layers
●

Simple demo
Authentication
●



Allows easy implementation of user authentication for your
application
Supports multiple types of authentication


HTTP Basic



Application level
Authentication – Application Level
●

Many convenience methods
// Attempt to login
Auth::attempt(array('email' => $email, 'password' => $pwd))
// Check if the current user is logged in
Auth::check();
// Access the logged in user
$name = Auth::user()->name;
// Manually login a user with its ID
Auth::loginUsingId(1);
// Log the user out
Auth::logout();
Authentication – Application Level


Uses Bcrypt as the default hashing algorithm, with a
default workload of 8



Workload can be changed freely



Algorithm itself can be changed by framework extension
// Workload 8 by default
$hash = Hash::make('password');
// Change workload
$hash = Hash::make('password', array('rounds' => 12));
IoC Container








For managing class dependencies
Promotes inversion of control by injecting dependencies at
runtime
Promotes greater flexibility by allowing dependency
implementations to be swapped easily
2 ways for resolving types:


Closure



Automatic Resolution
IoC Container


Closure
App::bind('user_manager', function($app)
{
return new UserRepository();
});
//
//
//
//

.........
.........
.........
.........

$um = App::make('user_manager');
IoC Container


Automatic Resolution
class UserManager
{
private $repo;
public function __construct(UserRepository $repo)
{
$this->repo = $repo;
}
}
$u = App::make('UserManager');
IoC Container


Automatic Resolution
class UserManager
{
private $repo;
public function __construct(UserRepositoryInterface $repo)
{
$this->repo = $repo;
}
}
// Interface resolution
App::bind('UserRepositoryInterface', 'DbUserRepository');
// Now we can use the IoC container to resolve the dependencies
$u = App::make('UserManager');
Facade
●

●

Provides a static-like syntax to access objects and their
methods in the IoC container
These are facades in action, and they are NOT static
method calls:
Auth::attempt()
Input::get()
Cookie::make()
Event::subscribe()
Facade
●

How does it work?


An object is registered into the IoC container



A facade is created to reference that object



An alias is defined to use the facade without importing
its namespace
Service Provider
●

●

A great way to add reusable components into your
application
Custom authentication driver, database driver, support
modules etc etc etc...
Service Provider
class MongoDBServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('mongodb', function() {
return new MongoDbManager();
});
}
}
// Register the service provider
App::register('MongoDBServiceProvider');
// Now you can use the Mongo DB manager
$mongodb = App::make('mongodb');
$mongodb->connect(....);
$mongodb->add(....);
Tips For Learning Laravel
●

●

Documentation is your best friend
Read the API to discover features not mentioned in the
documentation

●

Get used to closures

●

Learn the IoC container and service provider (MUST)

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Laravel - Website Development in Php Framework.
Laravel - Website Development in Php Framework.Laravel - Website Development in Php Framework.
Laravel - Website Development in Php Framework.
 
Intro to Laravel
Intro to LaravelIntro to Laravel
Intro to Laravel
 
Presentation laravel 5 4
Presentation laravel 5 4Presentation laravel 5 4
Presentation laravel 5 4
 
Laravel 5.4
Laravel 5.4 Laravel 5.4
Laravel 5.4
 
Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)
 
Why Laravel?
Why Laravel?Why Laravel?
Why Laravel?
 
10 Laravel packages everyone should know
10 Laravel packages everyone should know10 Laravel packages everyone should know
10 Laravel packages everyone should know
 
Getting to know Laravel 5
Getting to know Laravel 5Getting to know Laravel 5
Getting to know Laravel 5
 
MidwestPHP 2016 - Adventures in Laravel 5
MidwestPHP 2016 - Adventures in Laravel 5 MidwestPHP 2016 - Adventures in Laravel 5
MidwestPHP 2016 - Adventures in Laravel 5
 
Laravel 5 New Features
Laravel 5 New FeaturesLaravel 5 New Features
Laravel 5 New Features
 
All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5
 
Laravel 5 Annotations: RESTful API routing
Laravel 5 Annotations: RESTful API routingLaravel 5 Annotations: RESTful API routing
Laravel 5 Annotations: RESTful API routing
 
Laravel presentation
Laravel presentationLaravel presentation
Laravel presentation
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Laravel Introduction
Laravel IntroductionLaravel Introduction
Laravel Introduction
 
Web services with laravel
Web services with laravelWeb services with laravel
Web services with laravel
 
Knowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkKnowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP framework
 
All Aboard for Laravel 5.1
All Aboard for Laravel 5.1All Aboard for Laravel 5.1
All Aboard for Laravel 5.1
 
php[world] 2015 Laravel 5.1: From Homestead to the Cloud
php[world] 2015 Laravel 5.1: From Homestead to the Cloudphp[world] 2015 Laravel 5.1: From Homestead to the Cloud
php[world] 2015 Laravel 5.1: From Homestead to the Cloud
 

Similar a Intro to Laravel 4

Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
Tuna Tore
 
springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892
Tuna Tore
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js framework
Ben Lin
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
Igor Bronovskyy
 

Similar a Intro to Laravel 4 (20)

Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...
 
Exploring Symfony's Code
Exploring Symfony's CodeExploring Symfony's Code
Exploring Symfony's Code
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
 
springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892
 
Patterns Are Good For Managers
Patterns Are Good For ManagersPatterns Are Good For Managers
Patterns Are Good For Managers
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js framework
 
Codegnitorppt
CodegnitorpptCodegnitorppt
Codegnitorppt
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applications
 
[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development
 
Symfony2 and AngularJS
Symfony2 and AngularJSSymfony2 and AngularJS
Symfony2 and AngularJS
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
 
Osiąganie mądrej architektury z Symfony2
Osiąganie mądrej architektury z Symfony2 Osiąganie mądrej architektury z Symfony2
Osiąganie mądrej architektury z Symfony2
 
SCR Annotations for Fun and Profit
SCR Annotations for Fun and ProfitSCR Annotations for Fun and Profit
SCR Annotations for Fun and Profit
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenches
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJS
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
 
Creating your own framework on top of Symfony2 Components
Creating your own framework on top of Symfony2 ComponentsCreating your own framework on top of Symfony2 Components
Creating your own framework on top of Symfony2 Components
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
How AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design PatternsHow AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design Patterns
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
 

Último

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 

Intro to Laravel 4

  • 1. Introduction to Laravel 4 Benson Liang
  • 2. What will be discussed  Introduction  Installation  The MVC Layers  Authentication  IoC Container  Facade  Service Provider
  • 3. Introduction  The Creator  Objectives of Laravel  The Base  Closures  The Syntactic Sugar
  • 4. Introduction – The Creator Taylor Otwell .NET Developer
  • 5. Introduction – Objectives of Laravel  Get started on a project FAST  Fun to develop with  Promote S.O.L.I.D design patterns  Singe Responsibility Principle (SRP)  Open/Closed Principle (OCP)  Liskov Substitution Principle (LSP)  Interface Segregation Principle (ISP)  Dependency Inversion Principle (DIP)
  • 6. Introduction – The Base  Composer friendly  Symfony components  Swiftmailer  Monolog  ... and many more
  • 7. Introduction - Closures  Introduced in PHP 5.3  Anonymous functions  Useful for specifying callbacks Route::get( '/login', 'AuthController@showLoginForm' ); Route::get('/login', function() { return View::make('auth.loginForm'); });
  • 8. Introduction – The Syntactic Sugar  Easy to understand  Expressiveness and elegance Auth::attempt() Input::get() Cookie::make() Event::subscribe()
  • 9. Installation composer create-project laravel/laravel /web/laraveltest --no-dev --prefer-dist
  • 10. The MVC Layers ● Eloquent ORM ● Blade Engine ● Controller
  • 11. The MVC Layers – Eloquent ORM ● Active record style ● Easy to use class Book extends Eloquent { protected $table = 'book'; protected $primaryKey = 'book_id'; public $timestamps = false; }
  • 12. The MVC Layers – Eloquent ORM ● Some examples of queries: Book::all(); Book::find(1); Book::where('name', '=', 'Michael Cheng'); ● Insert / Update $b = new Book(); $b->title = 'Laravel Basics'; $b->description = 'A very nice book'; $b->save(); $b = Book::find(2); $b->title = 'Laravel Advanced'; $b->save();
  • 13. The MVC Layers – Eloquent ORM ● Relationship mapping public function author() { return $this->belongsTo('Author', 'author_id'); }
  • 14. The MVC Layers – Eloquent ORM ● Supports soft delete protected $softDelete = true; // Automatically excludes soft deleted rows Book::all(); // Include soft deleted rows Book::withTrashed()->get(); // Include only soft deleted rows Book::onlyTrashed()->get(); // Undo the soft delete $b = Book::withTrashed()->where('book_id, '=', 1); $b->restore();
  • 15. The MVC Layers – Eloquent ORM ● Supports query scope public function scopePopular($query) { return $query->where('rating', '>', '4'); } Book::popular()->get();
  • 16. The MVC Layers – Eloquent ORM ● Supports accessors and mutators // Accessor public function getGenderAttribute($value) { return ($value == 'm') ? 'Male' : 'Female'; } // Mutator public function setNameAttribute($value) { $this->attributes['name'] = strtolower($value); }
  • 17. The MVC Layers – Blade Engine ● Stock templating engine for Laravel ● Supports template inheritance and sections <html> <head> <title>@yield('page_title')</title> @yield('css') @yield('javascript') </head> <body> Some text @yield('content') </body> </html>
  • 18. The MVC Layers – Blade Engine @extends('layout') @section('page_title', 'Login Page') @section('css') <link rel="stylesheet" type="text/css" href="mystyle.css" /> @endsection @section('javascript') <script type='text/javascript' src='jquery.js'></script> @endsection @section('content') This is the content for a particular page. @endsection
  • 19. The MVC Layers – Blade Engine ● Some control structures @if (.....) .... @elseif .... @else .... @endif @unless (....) .... @endunless
  • 20. The MVC Layers – Blade Engine @for (....) .... @endfor @while (....) .... @endwhile @foreach (....) .... @endforeach
  • 21. The MVC Layers – Blade Engine ● Alternate way to echo variable values My name is <?php echo $user->name ?> My name is {{ $user->name }}
  • 22. The MVC Layers - Controller ● Basic controller // The controller itself class AuthController extends BaseController { public function showLoginForm() { return View::make('auth.loginForm'); } } // Routing file Route::get('/auth', 'AuthController@showLoginForm')
  • 23. The MVC Layers - Controller ● RESTful controller // The controller itself class BookController extends BaseController { public function getShowAll() { // .............. } public function postAdd() { // .............. } } // Routing file Route::controller('/books', 'BookController');
  • 24. The MVC Layers - Controller  Resource controller – Generated using Artisan CLI – Allows easy RESTful implementation
  • 25. The MVC Layers - Controller  Resource controller  Paths and route names are generated automatically Verb Path Action Route Name GET /resource index resource.index GET /resource/create create resource.create POST /resource/ store resource.store GET /resource/{id} show resource.show GET /resource/{id}/edit edit resource.edit PUT / PATCH /resource/{id} update resource.update DELETE /resource/{id} destroy resource.destroy
  • 27. Authentication ●  Allows easy implementation of user authentication for your application Supports multiple types of authentication  HTTP Basic  Application level
  • 28. Authentication – Application Level ● Many convenience methods // Attempt to login Auth::attempt(array('email' => $email, 'password' => $pwd)) // Check if the current user is logged in Auth::check(); // Access the logged in user $name = Auth::user()->name; // Manually login a user with its ID Auth::loginUsingId(1); // Log the user out Auth::logout();
  • 29. Authentication – Application Level  Uses Bcrypt as the default hashing algorithm, with a default workload of 8  Workload can be changed freely  Algorithm itself can be changed by framework extension // Workload 8 by default $hash = Hash::make('password'); // Change workload $hash = Hash::make('password', array('rounds' => 12));
  • 30. IoC Container     For managing class dependencies Promotes inversion of control by injecting dependencies at runtime Promotes greater flexibility by allowing dependency implementations to be swapped easily 2 ways for resolving types:  Closure  Automatic Resolution
  • 31. IoC Container  Closure App::bind('user_manager', function($app) { return new UserRepository(); }); // // // // ......... ......... ......... ......... $um = App::make('user_manager');
  • 32. IoC Container  Automatic Resolution class UserManager { private $repo; public function __construct(UserRepository $repo) { $this->repo = $repo; } } $u = App::make('UserManager');
  • 33. IoC Container  Automatic Resolution class UserManager { private $repo; public function __construct(UserRepositoryInterface $repo) { $this->repo = $repo; } } // Interface resolution App::bind('UserRepositoryInterface', 'DbUserRepository'); // Now we can use the IoC container to resolve the dependencies $u = App::make('UserManager');
  • 34. Facade ● ● Provides a static-like syntax to access objects and their methods in the IoC container These are facades in action, and they are NOT static method calls: Auth::attempt() Input::get() Cookie::make() Event::subscribe()
  • 35. Facade ● How does it work?  An object is registered into the IoC container  A facade is created to reference that object  An alias is defined to use the facade without importing its namespace
  • 36. Service Provider ● ● A great way to add reusable components into your application Custom authentication driver, database driver, support modules etc etc etc...
  • 37. Service Provider class MongoDBServiceProvider extends ServiceProvider { public function register() { $this->app->bind('mongodb', function() { return new MongoDbManager(); }); } } // Register the service provider App::register('MongoDBServiceProvider'); // Now you can use the Mongo DB manager $mongodb = App::make('mongodb'); $mongodb->connect(....); $mongodb->add(....);
  • 38. Tips For Learning Laravel ● ● Documentation is your best friend Read the API to discover features not mentioned in the documentation ● Get used to closures ● Learn the IoC container and service provider (MUST)