Date post: | 06-May-2015 |
Category: |
Technology |
Upload: | singapore-php-user-group |
View: | 3,470 times |
Download: | 1 times |
Introduction to Laravel 4Benson 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:
● Insert / Update
Book::all();Book::find(1);Book::where('name', '=', 'Michael Cheng');
$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 rowsBook::all();
// Include soft deleted rowsBook::withTrashed()->get();
// Include only soft deleted rowsBook::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
// Accessorpublic function getGenderAttribute($value){ return ($value == 'm') ? 'Male' : 'Female';}
// Mutatorpublic 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 itselfclass AuthController extends BaseController{ public function showLoginForm() { return View::make('auth.loginForm'); }}
// Routing fileRoute::get('/auth', 'AuthController@showLoginForm')
The MVC Layers - Controller
● RESTful controller
// The controller itselfclass BookController extends BaseController{ public function getShowAll() { // .............. }
public function postAdd() { // .............. }}
// Routing fileRoute::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 loginAuth::attempt(array('email' => $email, 'password' => $pwd))
// Check if the current user is logged inAuth::check();
// Access the logged in user$name = Auth::user()->name;
// Manually login a user with its IDAuth::loginUsingId(1);
// Log the user outAuth::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 resolutionApp::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 providerApp::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)