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.phpRoute::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;elsereturn false;}}// Devolverá True o FalseUser::isAuth()
Fluent
DB::table('users')->insert(array('username' => 'JaimeMSE','password' => Hash::make('LaravelMola');));DB::table('users')->where... o ->joinDB::table('users')->whereRaw('popular=1 AND status=1');
Eloquent
vs
Fluent
Migraciones
Y
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 falseConfig::get('app.locale') // Obtener idioma predeterminado
Cambiar configuración en vivo
Config::set('app.debug', true)App::setLocale('es') // Cambiar idioma predeterminadoConfig::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
- 3,007
