Laravel 4

¿Qué es?
¿Es realmente tan bueno como dicen?
¿Por qué merece la pena?


Por @JaimeMSE      


Ventajas de usar Laravel


MVC
Eloquent y Fluent
Curva de aprendizaje
Te ayuda a escribir buen php
Composer
Artisan
Schema Builder
Test unitarios
Servidor de desarrollo integrado


Y mucho más...


Rutas


Route::get('/', function(){    return 'Hello world';});
Route::post('/registro', function(){ // Obtenemos los datos y se los pasamos a la NSA});
Route::any('/loquesea', function(){ // Lo mismo de antes});

Grupos de rutas y filtros

Route::group(array('before' => 'admin', 'prefix' => 'admin'), {   // Necesitas ser admin para acceder a las rutas});



Filtros

 // En el archivo filters.php
Route::filter('nombreDelFiltro', function(){ if(!User::auth()) return Redirect::to('/login');

});

Rutas + Controlador

 Route::get('/login', 'UserController@login'); Route::post('/login', 'UserController@login_post);


Rutas con parámetros

 Route::get('/user/{id}', 'UserController@show'); Route::get('/users/{status?}', 'UserController@list');


Rutas avanzadas

 Route::get('/user/{id}', array('as' => 'profile', 'as' => 'UserController@show'));
Route::get(trans('general.user')/{id}, array('as' => 'profile', 'as' => 'UserController...)

Controlador

class UserController extends BaseController {
public function login() { return View::make('login'); }
public function post_login() { $inputs = Input::all();
// Validaciones y demás }
public function show($id) { $user = User::find($id); return 'Hola '.$user->name; }}


Procesador de contexto


class BaseController extends Controller {        public function __construct()    {        $variable = Variable::all();        View::share('variable', $variable);    }
}

Parámetros a las vistas



class UserController extends BaseController {
public function profile($id) { $user = User::find($id); return View::make('users.profile') ->with('user', $user); }
}

Modelos

class User extends Eloquent {    protected $table = 'users';    public $timestamps = false; //default true}


Métodos predefinidos

User::find(1);
User::all();
User::where('status', '=', 1)->get();
User::orderBy('name', 'DESC')->get();

Relaciones

class User extends Eloquent {
public function phone() { // Siempre busca en 'nombreModelo_id' Ej 'user_id' return $this->hasOne('Phone'); }
public function comments() { return $this->hasMany('Comment', 'usuario'); }}
$phone = User::find(1)->phone;$comments = User::find(1)->comments;


Scopes



class User extends Eloquent {
public function scopePopular($query) { return $query->where('votes', '>', 100); }}
$user = User::popular()->get();

Funciones en el modelo


class User extends Eloquent {
public function isAuth() { if(Session::has('user_id')) return true; else return false; }}
// Devolverá True o FalseUser::isAuth()


Fluent


DB::table('users')->insert(array(    'username' => 'JaimeMSE',    'password' => Hash::make('LaravelMola');));
DB::table('users')->where... o ->join
DB::table('users')->whereRaw('popular=1 AND status=1');


Eloquent

vs 
Fluent


Migraciones 

Semillas


Schema Builder


Schema::create('users', function(Blueprint $table)
{
    $table->bigIncrements('id')->unsigned();
    $table->integer('web_id')->unsigned();
    $table->string('username', 50)->unique();
    $table->string('email', 100)->unique();
    $table->string('password', 60);    $table->string('name', 60)->nullable();
    $table->boolean('type')->default(1);
    $table->timestamps();

    $table->foreign('web_id')
        ->references('id')->on('webs')
        ->onDelete('restrict');
});

Vistas


Rutas
|
Controlador
|
Modelo?
|
Controlador
|
Vista
|
Usuario final

MVC

Plantillas

carpeta/base.blade.php
<body>
@yield('content')
@section('footer') Texto por defecto @show</body>
index.blade.php
@extends('carpeta.base')
@section('content') Contenido@stop

Blade

{{$variable}}
{{{$variableEscapada}}}
@if($var == 1)@else@endif
@foreach(User::all() as $user) {{$user->name}}@endforeach
@for($i = 0; $i<10; $i++) {{$i}}@endfor
@include('archivo')


Helpers


route('users')

Request::server('HTTP_HOST')

Request::is('/users*')

dd() == var_dump + die

trans('general.titulo')


y muchos más


Sesiones


Session::has('user_id')

Session::get('user_id')

Session::put('user_id', 1)

Session::flash('user_id', 1)

Session::forget('user_id')

Session::flush()

Validar un formulario

public function post_login() {    $inputs = Input:all();
$rules = array( 'email' => 'required|email|exists:users,email', 'password' => 'required|between:6,20', );
$v = Validator::make($inputs, $rules);
if($v->fails()) return Redirect::back() ->withInput() ->withErrors($v);
// Identificar al usuario}

Enviar un email

Mail::send('emails.welcome', $data, function($message)
{
    $message->to('foo@example.com', 'John Smith')            ->subject('Welcome!');
});


... pasados unos segundos

Mail::later(5, 'emails.welcome', $data, function($message)
{
    $message->to('foo@example.com', 'John Smith')
            ->subject('Welcome!');
});

Paginación easy


En el controlador
public function users() {    $users = User::paginate(15)->get();    return View::make('users')->with('users', $users);}

En la vista
@foreach($users as $user)
{{$user->name}}@endforeach
{{$users->links}}

Multilenguaje

app/lang/es/general.php
<?php return array(    'jaimemse' => 'Bienvenido @JaimeMSE',    'user' => 'Bienvenido :user',);
Donde quieras
trans('general.jaimemse');
trans('general.user, array('user' => 'BienvenidoSáez :D'));
Lang::get()== trans() == @lang() //sólo en Blade

Obtener configuración

Config::get('app.debug') // true o false
Config::get('app.locale') // Obtener idioma predeterminado



Cambiar configuración en vivo

Config::set('app.debug', true)
App::setLocale('es') // Cambiar idioma predeterminado
Config::set('mail.pretend', true')

Errores



Y mucho más


Form::open() || Form::input() || Form::close()

Log::warning('Something could be going wrong.'); 
Response::json($toJson);Response::download($fileToDownload)
Cookie::get('user_id')Cookie::forever('key', 'value')
Tests unitarios con PHPUnit


En toda la Internet



@JaimeMSE




¡Gracias!

Laravel 4

By jaimemse

Laravel 4

  • 2,758