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 False
User::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
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 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