Académique Documents
Professionnel Documents
Culture Documents
la
dirigir la operacin. Por eso, debe disponer de un grupo de chefs(Repositorios o Modelos)a su cargo y
solicitar a cada uno lo que corresponda.
Ok, s que quieren aprender a programar, s que quieren ver cdigo,so, here we go:
Cdigo :
<?php
//app/routes.php
Route::get('pasta-with-meatballs/{id_table}, {type}', array('as' => 'pasta_meatballs',
'uses' => 'ItalianController@pastaWithMeatBalls'))->where(id_table, [0-9]+);
Cdigo :
<?php
//app/controllers/ItalianController.php
class ItalianController extends KitchenController {
protected $pastaRepo;
protected $meatRepo;
protected $sauceRepo;
public function __construct(PastaRepoInterface $pasta, MeatRepoInterface $meat,
SauceRepoInterface $sauce)
{
$this->pastaRepo = $pasta;
$this->meatRepo = $meat;
$this->sauceRepo = $sauce;
}
public function pastaWithMeatballs($idTable, $type = long)
{
// Si el usuario pidi pasta larga cocinaremos espaguetis
if ($type == long)
{
$pasta = $this->pastaRepo->cookSpaghetti();
}
// Si el usuario pidi pasta corta cocinaremos rigatonis
else if ($type == short)
{
$pasta = $this->pastaRepo->cookRigatoni();
}
else
{
return Redirect::route(table, array($idTable)->with(message, Por favor
elija pasta corta o pasta larga);
}
$meatBalls = $this->meatRepo->cookMeatBalls();
$napoliSauce = $this->sauceRepo->cookNapoliSauce();
Interesante, no? Lamentablemente ni Laravel ni PHP pueden preparar comida por nosotros, esosera
genial,
pero si leyeron en detalle el cdigo descrito arriba y lo entienden han dado un gran paso para ser
buenoschefs, quiero decir, programadores en Laravel.
Examinemos el cdigo:
Fjense que ya el segundo parmetro no es una funcin annima,como en los ejemplos anteriores.
Ahora es unarray:
El parmetro as define el nombre de la ruta, suponiendo que escribimos nuestra vista
views/menu.blade.php podremos colocar el enlace a nuestra ruta as:
Cdigo :
<!-- app/views/menu.blade.php -->
<ul>
<li><a href={{ route(pasta_meatballs, array($idTable, long)) }}>Pasta larga</a>
</li>
<li><a href={{ route(pasta_meatballs, array($idTable, short)) }}>Pasta corta</a>
</li>
</ul>
O un redirect:
Cdigo :
Redirect::route(pasta_meatballs)
Composer y Laravel saben cmo cargar nuestros controladores y otras clases. Ms adelante hablaremos
delAutoloaderde Composer
Entonces
una vez que nuestro usuario haga click en los tems Pasta
larga o Pasta corta de nuestro
men Laravel
armar por nosotros la Estacin de comida italianaItalianControllery
asignar los chefs
(clases, repositorios) para la pasta, la carne y la salsa, y una vez que est todo listo llamar a la funcin /
accinpastaWithMeatBalls.
Qu es una Interfaz
Una interfaz, es como un contrato que permite definir los mtodos (funcionalidades)mnimosque una
clase debe tener. En s NO implementa cdigo, slo sirve paradefinir los requerimientos de las clases
de cierto tipo.
En nuestro ejemplo, los requisitos mnimos que nuestro restaurante exige para contratar a
un chef de pasta, seran:
Cdigo :
// app/models/PastaRepoInterface
interface PastaRepoInterface {
public function cookSpaghetti();
public function cookRigatoni();
public function cookLasagne();
}
// Etc. Etc...
}
Esta
se pasa a la vista, que en nuestro ejemplo sera la estacin encargada de decorar el plato para que no
slo tenga la comida(data)adecuada sino que luzca bien(diseo, layouts, HTML5).
Perono siempre necesitaremos una capa de presentacin.
Qu pasa si el usuario pide su comida
para llevar, por ejemplo? Slo habra que entregarla en un envase, sin platos, sin adornos,sin HTML, A
qu les recuerda eso? Cuando hacemos una peticinAJAX, el servidor simplemente nos devuelve los
datos en formatoJSON:
Cdigo :
return Response::json($food);
De
una manera muy sencilla le decimos a Laravel que redirija la peticin del usuario de nuevo a su mesa,
donde le pediremos que por favor elija pasta corta o larga.
Por supuesto necesitaramos definir otra ruta:
Cdigo :
//app/routes.php
// [More code here]
Route::get(table/{id}, array(as => table, uses => tableController@index))>where(id, [0-9]+); //etc
Conclusin
En
este captulo y con un ejemplo sencillo aprendimos qu son los controladores, cmo se crean y usan en
Laravel, tambin aprendimos cmo enlazar las rutas a ellos y aprendimos sobre Repositorios e Interfaces
que mantienen la lgica y responsabilidades de nuestra aplicacin separadas, como debe ser. Tambin le
dimos un vistazo a cmo trabajar con vistas, redirecciones y JSON.
En los prximos captulos ir detallando todo lo anterior.
Como
ltima nota, quizs algunos lectores estn pensando algo como: Pero yo no necesito unrestaurante
Para
qu crear un controlador y luego una interfaz y un repositorio y
etc. etc. si se puede hacer todo tan
rpido y fcil?
Tienen
razn, eso tambin funciona, como uno de esos puestos de comida rpida que son atendidos por
una o dos personas que te dan
la bienvenida, preparan la comida, te sirven y te cobran y limpian las
mesas eso funciona. Pero si quieren ser programadores de alta categora, lo mejor es que aprendan y
usenlas mejores prcticas de desarrolloen
el lenguaje y framework en el cual se desempeen... Esto es
un poco de lo que quiero lograr con Laravel y estos captulos: que aprendan Laravel pero aprendan bien.
No subestimen sus proyectos, no subestimen a sus clientes y sobretodo no se subestimen a uds. mismos.
Como siempre todas sus impresiones, dudas, preguntas, aportes, en los comentarios, por favor