Laravel Codehappy Es Libre

Embed Size (px)

Citation preview

  • 8/10/2019 Laravel Codehappy Es Libre

    1/140

  • 8/10/2019 Laravel Codehappy Es Libre

    2/140

    Laravel: Code Happy (ES)Desarrollo de aplicaciones con el Framework de PHP

    Laravel para principiantes.

    Dayle Rees and Antonio Laguna

    This book is for sale athttp://leanpub.com/codehappy-es

    This version was published on 2013-02-06

    This is aLeanpubbook. Leanpub empowers authors and publishers with the Lean Publishingprocess.Lean Publishingis the act of publishing an in-progress ebook using lightweight toolsand many iterations to get reader feedback, pivot until you have the right book and buildtraction once you do.

    2012 - 2013 Dayle Rees.

    http://leanpub.com/codehappy-eshttp://leanpub.com/http://leanpub.com/manifestohttp://leanpub.com/manifestohttp://leanpub.com/http://leanpub.com/codehappy-es
  • 8/10/2019 Laravel Codehappy Es Libre

    3/140

    Tweet This Book!Please help Dayle Rees and Antonio Laguna by spreading the word about this book onTwitter!

    The suggested hashtag for this book is#codehappy.

    Find out what other people are saying about the book by clicking on this link to search for thishashtag on Twitter:

    https://twitter.com/search/#codehappy

    http://twitter.com/https://twitter.com/search/#codehappyhttps://twitter.com/search/#codehappyhttps://twitter.com/search/#codehappyhttps://twitter.com/search/#codehappyhttp://twitter.com/
  • 8/10/2019 Laravel Codehappy Es Libre

    4/140

    ndice general

    Reconocimiento i

    Reconocimientos del traductor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i

    Erratas ii

    Feedback iii

    Introduccin iv

    1 Comenzando 1

    1.1 Mtodo 1 Crea un nuevo host virtual . . . . . . . . . . . . . . . . . . . . . . . . 1

    1.2 Mtodo 2 Enlace simblico a la carpeta pblica . . . . . . . . . . . . . . . . . . 2

    1.3 Centrndonos de nuevo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    2 Estructura de proyectos 4

    2.1 Estructura del directorio raz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2.2 Estructura del directorio Application . . . . . . . . . . . . . . . . . . . . . . . . 5

    3 Usando controladores 8

    3.1 Enrutando controladores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    3.2 Pasando parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3.3 Usando vistas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3.4 Controladores RESTful. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    3.5 El controlador base, Base_Controller . . . . . . . . . . . . . . . . . . . . . . . . 13

    3.6 Enrutamiento avanzado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    4 Rutas con closures 15

    4.1 Closures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    4.2 Redirecciones y rutas con nombre. . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4.3 Filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    4.4 Grupos de rutas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

  • 8/10/2019 Laravel Codehappy Es Libre

    5/140

    NDICE GENERAL

    5 Enlaces y URLs 20

    5.1 Obteniendo URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    5.2 Generando enlaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    6 Formularios 25

    6.1 Creando formularios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    6.2 Aadiendo etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    6.3 Generando campos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    6.4 Generando botones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    6.5 Campos secretos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    6.6 Token CSRF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286.7 Macros de formulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    7 Gestionando la entrada de datos 30

    7.1 Datos de peticiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    7.2 Archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    7.3 Datos flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    8 Validacin 348.1 Estableciendo una validacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    8.2 Errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    8.3 Reglas de validacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    8.4 Mensajes de error personalizados . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    8.5 Reglas de validacin personalizadas. . . . . . . . . . . . . . . . . . . . . . . . . 40

    8.6 Clases de validacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    9 Migraciones 42

    9.1 Configuracin de la base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . 42

    9.2 Migraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    10 Fluent Query Builder 47

    10.1 Obteniendo resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    10.2 Clausulas WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    10.3 Joins de tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    10.4 Ordenacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

  • 8/10/2019 Laravel Codehappy Es Libre

    6/140

    NDICE GENERAL

    10.5 Limitando no, cogiendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    10.6 Saltndonos resultados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    10.7 Agregados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    10.8 Expresiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    10.9 ++ (o decremento) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    10.10 Insertar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    10.11 Actualizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    10.12 Borrar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    11 ORM Eloquent 56

    11.1 Creando y usando modelos de Eloquent . . . . . . . . . . . . . . . . . . . . . . 5611.2 Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    11.3 Insertando modelos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    11.4 Tablas pivote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    11.5 Carga anticipada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

    11.6 Setters y Getters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    12 Eventos 69

    12.1 Activa un evento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6912.2 Escucha un Evento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    12.3 Eventos con parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    12.4 Eventos de Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    12.5 Ejemplo de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    13 Plantillas Blade 73

    13.1 Lo bsico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    13.2 Lgica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    13.3 Distribuciones de Blade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

    14 Autentificacin 77

    14.1 Configuracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

    14.2 Configurando el formulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    14.3 Gestionando el inicio de sesin . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    14.4 Protegiendo rutas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    14.5 Personalizacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

  • 8/10/2019 Laravel Codehappy Es Libre

    7/140

    NDICE GENERAL

    15 El tutorial del Blog 86

    15.1 El diseo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    15.2 Configuracin bsica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

    15.3 Modelos Eloquent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    15.4 Rutas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

    15.5 Vistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

    15.6 A programar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    15.7 El futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    16 Pruebas unitarias 98

    16.1 Instalacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

    16.2 Creando una prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

    16.3 Ejecutando pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

    16.4 Probando el ncleo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

    17 Cach 102

    17.1 Configuracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

    17.2 Estableciendo valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

    17.3 Obteniendo valores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10217.4 Una forma mejor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

    18 Autocarga de clases 104

    18.1 Asociacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

    18.2 Carga de directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

    18.3 Asociacin por espacio de nombre . . . . . . . . . . . . . . . . . . . . . . . . . 105

    18.4 Asociando guiones bajos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    19 Configuracin 107

    19.1 Creando nuevos archivos de configuracin . . . . . . . . . . . . . . . . . . . . . 107

    19.2 Leyendo configuracin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

    19.3 Estableciendo la configuracin . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

    20 El contenedor IoC 110

    20.1 Registrando objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    20.2 Resolviendo objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

    20.3 Singletons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

  • 8/10/2019 Laravel Codehappy Es Libre

    8/140

    NDICE GENERAL

    21 Encriptacin 114

    21.1 Encriptacin en un sentido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    21.2 Encriptacin en ambos sentidos . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    22 Contenido AJAX 116

    22.1 Plantilla de la pgina. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

    22.2 El JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

    22.3 Envo de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

    22.4 Respuestas JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

    22.5 Detectando una peticin AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    23 Debugueando Aplicaciones 123

    23.1 Gestor de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

    23.2 Configuracin de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

    23.3 Registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

  • 8/10/2019 Laravel Codehappy Es Libre

    9/140

    ReconocimientoAntes que nada, me gustara agradecer a mi novia Emma, no solo por apoyarme en todas misideas frikis, sino por hacer la increble foto del panda rojo para la portada del libro! Te amoEmma!

    A Taylor Otwell, tambin te quiero to, pero de forma totalmente varonil. Gracias por hacer unframework que es realmente un placer usar, hace que nuestro cdigo se lea como poesa y pordedicar tanto tiempo y pasin en su desarrollo.

    Eric Barnes, Phill Sparks, Shawn McCool, Jason Lewis, Ian Landsman, gracias por todo el apoyocon el framework, y por permitirme ser parte de un proyecto con tanto potencial.

    A todos los lectores de mi blog que mostraron inters en mis tutoriales, gracias! Sin vosotrosnunca habra tenido la confianza de escribir un libro.

    Reconocimientos del traductor

    Me gustara agradecer a mi mujer, Laura, todo el apoyo que me ha ofrecido. Especialmenteteniendo en cuenta que me he tomado parte de las vacaciones para ponerme a traducir este libro.

    Al seor Dayle Rees, por dejarme ser parte de este proyecto y brindarme esta oportunidad. Hasido un placer trabajar contigo y todo un desafo el traducir este estilo tan desenfadado que tecaracteriza.

    Por supuesto a Taylor Otwell, este framework es una gozada. Es una gozada de programar y deleer y estoy seguro de que aun le queda mucho camino por recorrer. No quiero ni imaginar loque cuece para la versin 4.0.

    A todos aquellos que leis mis artculos en mi blog, gracias por tomaros el tiempo de escribirmecomentarios de mandarme correos y de apreciar el trabajo que se hace. Espero que lo disfrutis.

    i

  • 8/10/2019 Laravel Codehappy Es Libre

    10/140

    ErratasAunque haya tenido todo el cuidado del mundo para asegurarme de que el libro no tiene errores,algunas veces unos ojos cansados juegan malas pasadas, y los errores escapan al radar. Si teencuentras con algn error en el libro, ya sea de escritura o de cdigo, te agradecer mucho sipudieras avisarme de su presencia envindome un correo [email protected] elcaptulo y la ubicacin del error.

    Los errores sern solucionados conforme vayan siendo descubiertos, y las correcciones sernlanzadas con la prxima publicacin del libro.

    mailto:[email protected]

    ii

    mailto:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/10/2019 Laravel Codehappy Es Libre

    11/140

    FeedbackDe igual forma, puedes enviarme cualquier comentario que puedas tener sobre el contenidodel libro envindome un correo [email protected]. Me comprometo a responder todos loscorreos que reciba sobre el libro.

    mailto:[email protected]

    iii

    mailto:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/10/2019 Laravel Codehappy Es Libre

    12/140

    IntroduccinHola! Soy Dayle Rees, y voy a ser vuestro gua en este mgico viaje hacia el mundo de Laravel!Vale, pensndolo mejor, eso me qued realmente cursi. Este que ves es mi primer libro, por loque voy no tengo mucha prctica con toda la jerga literaria de alto nivel, por lo que si te gustaun texto directo, y ser hablado como si fueras un ser humano, estamos en el mismo barcoentonces!

    Os estaris preguntando Por qu debera confiar en este to para que me ensee Laravel? Nisiquiera es un autor experimentado!

    Lo que me falta de experiencia, lo tengo de entusiasmo. Soy un gran fan del desarrollo web, ylas herramientas y trucos que nos ahorran tiempo, o hacen nuestro trabajo mucho ms fcil.Laravel cumple ambos requisitos, y es una de las piezas de software ms tiles que jams haya

    descubierto. De hecho, mi entusiasmo y pasin por el framework, que solo tiene rivalidad conel autor del framework me han llevado a ser includo como miembro del equipo de Laravel, oConcilio como nos gusta llamarlo. Suena mejor, verdad?

    Estar en el Concilio me otorga ciertos privilegios como ser notificado de nuevas ideas y adicionesplaneadas al framework, y contribuyendo al framework estoy constantemente en contacto conel cdigo que est en constante desarrollo. Esto me deja en una gran posicin para mantener ellibro actualizado, lo cual pretendo hacer con cada futuro lanzamiento del framework.

    Aunque no me gusta salirme del tema, me parece obligatorio tener un pequeo prrafo sobreel autor de libros de este tipo, por lo que vamos a hacerlo corto y agradable. Vivo en lacosta de Gales (es un pas del lado de Inglaterra para los que seis del otro lado del charco)y trabajo para una gran organizacin del sector pblico en Aberystwyth. En mi tiempo libreestoy realmente involucrado con Laravel. Oh, y como he dicho antes, no me considero un genioliterario, seamos sinceros mi escritura va a ser penosa, no va a ser tan buena como la de otroslibros de programacin. Os hablar como una persona real, a la que podras responder tambin,ya lo veremos. Con un poco de suerte, mi pasin por Laravel compensar mi Ingls comn (paraser justos, soy Gals). Ya no necesitas saber ms sobre mi, centrmonos ahora en Laravel.

    Laravel es un soplo de aire fresco en el mundo de PHP. El lenguaje de programacin PHP eshabitualmente conocido por sus horribles nombres de funciones, y aunque los desarrolladoresPHP hemos aprendido a quererlo, la sintaxis puede ser un poco fea comparada con algunoslenguajes Japoneses modernos. Hola Ruby!

    Afortunadamente Laravel cambia todo esto, de hecho creo que la sintaxis de Laravel (que estconstruido sobre PHP) es tan expresiva y cuidada, que la encuentro mucho ms sencilla de leerque Ruby. No es muy compacta, y aunque no se lea como una frase en ingls, se lee como unapoesa que solo puede ser leida por los ojos de un programador.

    Pero Dayle

    Digamos que de repente te asalta la idea de que podras haber gastado tus $4.99 en una bebidadivertida.

    Laravel es un framework, no un lenguaje!

    iv

  • 8/10/2019 Laravel Codehappy Es Libre

    13/140

    Introduccin v

    Es cierto, me has pillado. Laravel puede que no sea un lenguaje, pero no tiene porqu serlo. Nosgusta PHP, vamos, seamos sinceros, aguantamos su fealdad, disfrutamos escribiendo todas esasllaves y puntos y comas. Laravel simplemente aade los atajos, o cambios sobre el cdigo para

    hacer la experiencia mucho ms agradable.Creo que el placer de trabajar con el framework, viene dado por sus expresivos mtodos queson consistentes en todo el framework.Str::upper()Intenta decirme que no sabes lo que hace,intenta decirme que no tiene sentido.

    No puedo.

    Sip, eso pensaba. Bueno, podra estar todo el da parloteando sobre todo lo que hace a Laravelmaravilloso, veamos, est Eloquent, el mejor ORM que haya visto nunca. Fue lo primero que metrajo al framework.

    La opcin de usar clausuras (closures) para rutas, pero solo si quieres. Creo que se ven geniales!

    No tener que cargar libreras antes de usarlas, s me has odo bien. Lo vers en accin mstarde.

    No, hay demasiadas caractersticas increibles para explicar aqu, creo que sera mejor si nossumergimos y comenzamos a aprender, despus de todo si gastaste $4.99 en esto en vez dealguna bebida divertida, ya debes de tener interes en el framework verdad? Adelante!

  • 8/10/2019 Laravel Codehappy Es Libre

    14/140

    1 ComenzandoLaraveles un framework de aplicaciones para PHP 5.3 escrito porTaylor Otwell. Fue escritocon las caractersticas de PHP 5.3 en mente. La combinacin de esas caractersticas y su expresivasintaxis le han granjeado al framework bastante popularidad.

    En este libro exploraremos Laravel desde los cimientos comenzando con su instalacin, y estoyseguro de que coincidiris conmigo en que es pan comido.

    Para poder usar cualquier framework PHP (no solo Laravel) necesitars tener un servidor webcon PHP 5.3 activo, recomendara instalar un servidor web en tu mquina local de desarrollo,para permitirte probar tu trabajo sin tener que subir los archivos cada vez que hagas un cambio.

    Este captulo asume que:

    Tienes un servidor web, basado en Apache, funcionando.

    Ests familiarizado con el sistema de archivos del servidor, y sabes cmo mover / copiarficheros.

    Tienes acceso para modificar los archivos de configuracin de Apache.

    Si ests usando un servidor web diferente, podrs encontrar muchos artculos en la red sobrecmo llevar a cabo las tareas que encontrars abajo para tu servidor.

    Primero, necesitaremos una copia del cdigo fuente del framework, simplemente dirgete aLaravel.comy dale al gran botn naranja de descarga. Para mayor seguridad, recomendara

    extraer los contenidos del paquete a algn otro sitio que no fuera la raz de tu web. Guarda unanota mental de dnde dejaste el cdigo fuente (o busca un postit!).

    Ahora tenemos dos opciones para permitir al framework ejecutarse como debe. Yo recomendaraintentar el primer mtodo ya que es la forma real de instalar el framework y nos permite realizaruna configuracin ms detallada. No obstante, encuentro el segundo mtodo mucho ms sencilloal trabajar con muchos proyectos en un servidor de desarrollo.

    1.1 Mtodo 1 Crea un nuevo host virtual

    Tendremos que crear un nuevo archivo de configuracin de Apache. En la mayora de lasinstalaciones estndar, creando un archivo miproyecto.confen la carpeta conf.dde Apache,lo incluir por defecto. Por favor, revisa la documentacin de tu configuracin actual para msinformacin.

    Dentro de tu nuevo archivo de configuracin, pega/escribe la siguiente declaracin del hostvirtual:

    http://laravel.com

    https://twitter.com/#!/taylorotwellhttp://laravel.com

    1

    http://laravel.com/https://twitter.com/#!/taylorotwellhttp://laravel.com/http://laravel.com/https://twitter.com/#!/taylorotwellhttp://laravel.com/http://laravel.com/https://twitter.com/#!/taylorotwellhttp://laravel.com/http://laravel.com/https://twitter.com/#!/taylorotwellhttp://laravel.com/
  • 8/10/2019 Laravel Codehappy Es Libre

    15/140

    Comenzando 2

    1

    2 DocumentRoot "/ruta/al/proyecto/de/laravel/public"

    3 ServerName miproyecto

    4 5 Options Indexes FollowSymLinks MultiViews

    6 AllowOverride all

    7

    8

    Tenemos que actualizar la direccin IP a una que no est actualmente en uso. (Mejor no usar127.0.0.1, esta es nuestra direccin loopback, y puede que ya tengas algo que la est usando.)Cambia ambas rutas para que apunten a la carpeta publicdel cdigo de Laravel. Ahora, reiniciatu servidor web.

    Ahora tenemos que crear una nueva entrada en la DNS local para apuntar el nombre delproyecto a tu host virtual. Primero abre el fichero hosts que normalmente se encuentra enc:\windows\system32\drivers\etc\hostsen Windows o /etc/hostsen sistemas basados enunix.

    Aade la siguiente lnea usando la direccin IP que usaste en la declaracin de tu host virtual, yun nombre para tu proyecto:

    1 127.0.0.2 miproyecto

    Ahora deberas de poder navegar a:http://miproyectocon tu navegador web, y ver la pgina de bienvenida de Laravel.

    1.2 Mtodo 2 Enlace simblico a la carpeta pblica

    Si ests familiarizado con el uso de enlaces simblicos en sistemas basados en unix, este mtodoser bastante sencillo.

    Dentro del cdigo que extrajiste (recuerdas dnde lo dejaste, verdad?) encontrars una subcarpeta llamadapublic. Esta carpeta contiene el archivo de inicializacin de Laravel y todos loselementos pblicos. Enlazaremos esta carpeta de forma simblica con la raz pblica de tu web(posiblemente /var/www/html/).

    Para crear el enlace simblico solo tienes que ejecutar el siguiente comando en la terminal de tueleccin, reemplazando las rutas donde sea necesario.

    1 ln -s /ruta/a/la/carpeta/public/de/laravel /ruta/a/la/carpeta/root/de/la/we\

    2 b/subdirectorio

    Por ejemplo :

  • 8/10/2019 Laravel Codehappy Es Libre

    16/140

    Comenzando 3

    1 ln -s /home/dayle/laravel/miaplicacion/public /var/www/html/miaplicacion

    Nota: Tambin puedes hacer un enlace simblico a la carpeta pblica de la raz de tu web

    directamente, pero prefiero usar un subdirectorio para poder trabajar en varios proyectos.

    Ahora deberas de poder navegar a:http://localhost/myapp

    con tu navegador web, y ver la pgina de bienvenida de Laravel.

    1.3 Centrndonos de nuevo

    En este punto deberas poder ver la pgina de bienvenida de Laravel, si es as

    Enhorabuena!Ahora tienes un nuevo proyecto de Laravel, ya ests preparado para empezar

    a programar!En el prximo captulo cubriremos la estructura de proyectos de Laravel, y explicaremos cadauno de los archivos y carpetas importantes.

    Si encuentras alguno de los temas tratados en este libro algo confusos, puedes usar los siguientesenlaces para encontrar la ayuda y el soporte que necesitas, o simplemente escribir un nuevocomentario enDayleRees.com(en Ingls).

    Web de Laravel

    Documentacin de Laravel

    API de Laravel Foros de Laravel

    No dejes de unirte a nuestra comunidad en continua expansin usando un cliente de IRC paraconectarte airc.freenode.net:6667y unirte al canal de#laravel!

    http://daylerees.comhttp://laravel.comhttp://laravel.com/docs

    http://laravel.com/apihttp://forums.laravel.com

    http://daylerees.com/http://laravel.com/http://laravel.com/docshttp://laravel.com/apihttp://forums.laravel.com/http://daylerees.com/http://laravel.com/http://laravel.com/docshttp://laravel.com/apihttp://forums.laravel.com/http://forums.laravel.com/http://laravel.com/apihttp://laravel.com/docshttp://laravel.com/http://daylerees.com/http://forums.laravel.com/http://laravel.com/apihttp://laravel.com/docshttp://laravel.com/http://daylerees.com/
  • 8/10/2019 Laravel Codehappy Es Libre

    17/140

    2 Estructura de proyectosEl paquete fuente de Laravel contiene varios directorios. Vamos a echar un vistazo a la estructuradel proyecto para conseguir una mayor comprensin de cmo funcionan las cosas. Puede queuse algunos trminos para describir algunas caractersticas de Laravel que puedan sonar algoconfusas si ests comenzando ahora mismo, si es as, no te preocupes porque cubriremos cadacaracterstica en posteriores captulos.

    2.1 Estructura del directorio raz

    Echemos un vistazo a la estructura de ficheros y directorios de primer nivel:

    1 /application

    2 /bundles

    3 /laravel

    4 /public

    5 /storage

    6 /vendor

    7 /artisan [archivo]

    8 /paths.php [archivo]

    Ahora centrmonos en uno cada vez:/application

    Aqu es donde estar la mayora del cdigo de tu aplicacin. Contiene tus rutas, modelos de datosy vistas. Pasars aqu la mayor parte del tiempo!

    /bundles

    Los Bundles son aplicaciones de Laravel. Se pueden usar para separar aspectos de tu aplicacin,o pueden serlanzados / descargados para compartir cdigo comn. Instalando nuevos bundlescon artisan, puedes extender la funcionalidad de Laravel para ajustarla a tus necesidades.

    Curiosamente, el directorio/applicationes tambin un bundle conocido comoDEFAULT_-

    BUNDLE, lo que significa que cualquier cosa que uses en /application, puedes usarla

    tambin en tus bundles!

    /laravel

    Aqu es donde se encuentran los archivos del ncleo del framework. stos son archivos quenecesita para ejecutar una peticin. Raramente tendrs que interactuar con este directorio, peroa veces puede resultar til revisar el cdigo fuente para ver cmo funciona una Clase o Mtodo.De manera alternativa, tambin puedes revisar elAPI de Laravel.

    /public

    http://bundles.laravel.com/http://laravel.com/api

    4

    http://bundles.laravel.com/http://laravel.com/apihttp://bundles.laravel.com/http://laravel.com/apihttp://laravel.com/apihttp://bundles.laravel.com/http://laravel.com/apihttp://bundles.laravel.com/
  • 8/10/2019 Laravel Codehappy Es Libre

    18/140

    Estructura de proyectos 5

    Este es el directorio al que debes aputnar tu servidor web. Contiene el archivo de inicializacinindex.phpque hace funcionar el framework de Laravel, y el proceso de enrutado. El directoriopblico tambin puede ser usado para almacenar recursos pblicamente accesibles como CSS,

    JavaScript, archivos e imgenes. La subcarpeta laravelcontiene los archivos necesarios paramostrar la documentacin sin conexin correctamente.

    /storage

    El directorio de almacenamiento se usa como almacn de archivos para servicios que usen elsistema de ficheros como driver, por ejemplo la clase Sessions o Cache. Este directorio debe poderser escrito por el servidor-web. No tendrs que interactuar con este directorio para construir unaaplicacin Laravel.

    /vendor

    Este directorio contiene cdigo usado por Laravel, pero que no fue escrito por el autor del

    framework o los contribuyentes. La carpeta contiene software de cdigo abierto, o partes desoftware que contribuyen a las caractersticas de Laravel.

    /artisan [archivo]

    Artisan es la interfaz de lnea de comandos de Laravel (CLI). Te permite realizar numerosastareasen la lnea de comandos. Incluso puedes crear tus propias tareas! Para ejecutar Artisansimplemente escribe:

    1 php artisan

    /paths.php [archivo]

    Este archivo es usado por el Framework para determinar rutas a los directorios importantes arribamencionado, y para facilitar un atajo para obtenerlos ( usando path()). No deberas necesitareditar este archivo.

    2.2 Estructura del directorio Application

    Como mencionamos anteriormente,/applicationes donde ocurre toda la diversin, por lo queechmosle un vistazo a la estructura del directorio/application.

    1 /config

    2 /controllers

    3 /language

    4 /libraries

    5 /migrations

    6 /models

    7 /tasks

    8 /tests

    9 /views

    http://laravel.com/docs/artisan/commands

    http://laravel.com/docs/artisan/commandshttp://laravel.com/docs/artisan/commandshttp://laravel.com/docs/artisan/commandshttp://laravel.com/docs/artisan/commandshttp://laravel.com/docs/artisan/commandshttp://laravel.com/docs/artisan/commands
  • 8/10/2019 Laravel Codehappy Es Libre

    19/140

    Estructura de proyectos 6

    10 /bundles.php [archivo]

    11 /routes.php [archivo]

    12 /start.php [archivo]

    Y ahora vamos a ver cada uno con detenimiento.

    /config

    La carpeta config contiene un varios archivos de configuracin para cambiar varios aspectosdel framework. No hace falta cambiar las configuraciones en la instalacin para que funcioneel framework recin salido del horno. La mayora de los archivos de configuracin devuelvenuna matriz de opciones de tipo clave-valor, algunas veces clave-closure que permiten una granlibertad de modificar el funcionamiento interno de algunas de las clases del ncleo de Laravel.

    /controllers

    Laravel facilita dos mtodos para el enrutado, el uso de controllers(controladores) y el usoderoutes(rutas). Esta carpet acontiene las clases Controlador que son usadas para facilitar unalgica bsica, interactuar con los modelos de datos, y cargar archivos de vistas para tu aplicacin.Los controladores se aadieron al framework posteriormente para ofrecer un entorno msfamiliar a usuarios que estuvieran migrando desde otros frameworks. Aunque fueron aadidosa posteriori, gracias al potente sistema de enrutado de Laravel, te permiten realizar cualquieraccin que pueda ser realizada usando rutasa closures.

    /language

    En este directorio se encuentran archivos PHP con matrices de cadenas para facilitar una

    traduccin sencilla de aplicaciones creadas con Laravel. Por defecto, el directorio contiene unarchivo de cadenas para la paginacin y validacin del formulario en Ingls.

    /libraries

    Este directorio puede ser usado para soltar libreras PHP de una sola clase para aadirfuncionalidad extra a tu aplicacin. Para Libreras ms grandes es recomendable crear un Bundle.La carpeta Libreras se aade al autocargador al inicio, en el archivo start.php.

    /migrations

    Esta carpeta contiene clases PHP que permiten a Laravel actualizar el esquema de tu base dedatos actual, o rellenarla con valores mientras mantiene todas las versiones de la aplicacin

    sincronizadas. Los archivos de migracin no se deben crear a mano, ya que el nombre del archivocontiene una marca de tiempo. En vez de eso, usa el comando de la interfaz CLI de Artisan phpartisan migrate:make para crear una nueva migracin.

    /models

    Los modelos son las clases que representan los datos de tu proyecto. Normalmente implicarnintegracin con algn tipo de base de datos u otra fuente de datos. Laravel facilita tres mtodospara interactuar con plataformas comunes de bases de datos, incluyendo un constructor deconsultas llamado Fluent, que te permite crear consultas SQL encadenando mtodos PHP, usarel ORM (mapeo de objetos relacional) Eloquent para representar tus tablas como objetos PHP,

    http://laravel.com/docs/database/fluent

    http://laravel.com/docs/database/fluenthttp://laravel.com/docs/database/fluenthttp://laravel.com/docs/database/fluenthttp://laravel.com/docs/database/fluenthttp://laravel.com/docs/database/fluenthttp://laravel.com/docs/database/fluent
  • 8/10/2019 Laravel Codehappy Es Libre

    20/140

    Estructura de proyectos 7

    o las antiguas consultas SQL planas a las que ests acostumbrado. Tanto Fluent como Eloquentusan una sintaxis similar, haciendo que su adopcin sea una sencilla transicin.

    El directorio models se carga de forma automtica desde start.php.

    /tasks

    Creando clases en el directorio tasks, podrs aadir tus propias tareas personalizadas a la interfazde lnea de comandos de Artisan. Las tareas se representan como clases y mtodos.

    /tests

    La carpeta tests facilita una ubicacin para que mantengas las pruebas unitarias de tu aplicacin.Si ests usando PHPUnit, puedes ejecutar todas las pruebas a la vez usando la interfaz de lneade comandos de Artisan.

    /views

    El directorio views contiene todos los archivos de plantillas HTML que sern usados por loscontroladores o las rutas, no obstante usa la extensin .php para los archivos de esta carpeta porfavor. De manera alternativa, puedes usar la extensin .blade.php para habilitar el anlisis conla librera de plantillas Blade, que ser explicada en un captulo posterior.

    /bundles.php [archivo]

    Para habilitar un bundle, simplemente adelo a la matriz en bundles.php. Tambin puedes usaruna pareja clave-valor nombre-matriz para definir opciones extra para el bundle.

    /routes.php [archivo]

    El archivo routes contiene los mtodos que permiten que las rutas sean mapeadas a susrespectivas acciones con Laravel. Este tema ser tratado en profundidad en posteriores captulos.Este archivo tambin contiene declaraciones de varios eventos incluyendo pginas de errores, ypuede ser usado para definir creadores de vistas o filtros de rutas.

    /start.php [archivo]

    El archivo start.php contiene las rutinas de inicializacin para el bundle /applicationbundle,como la auto-carga de directorios, carga de configuraciones, y otras cosas maravillosas! No dejesde echarle un vistazo a este archivo.

    En el prximo captulo, cubriremos el sistema de rutas usado por los controladores creando un

    pequeo sitio dinmico con varias pginas.

  • 8/10/2019 Laravel Codehappy Es Libre

    21/140

    3 Usando controladoresEn este captulo crearemos una sencilla web multi-pgina para mostrar el trabajo del sistema deenrutado de Laravel, sin profundizar en nada demasiado complicado.

    Como he mencionado en el anterior captulo, hay dos opciones disponibles para enrutar laspeticiones web en tu cdigo, Controladores y Rutas. En este captulo usaremos Controladores yaque cualquiera que se haya unido a nosotros desde otro framework, se sentir ms familiarizadocon ellos.

    3.1 Enrutando controladores

    Comencemos echndole un vistazo a un controlador:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    22/140

    Usando controladores 9

    Crearemos nuestro controlador en la carpeta application/controllers como archivo enminsculas coincidiendo con el nombre del controlador. El Controlador de arriba debera serguardado en:

    1 /application/controllers/cuenta.php

    Antes de que podamos usar nuestroControlador, tenemos que registrarlo en /application/routes.php.Vamos a aadir la siguiente lnea:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    23/140

    Usando controladores 10

    1 Esta es la pgina del perfil.

    Por qu ocurre esto? La accin index es una accin especial que se llama cuando no hay ninguna

    accin especificada en la URL, por tanto la pgina de arriba tambin podra ser invocada conla siguiente URL:

    1 /cuenta/index

    3.2 Pasando parmetros

    El enrutado simple es interesante, pero no nos ofrece nada que un simple sitio con PHP no pueda.

    Intentemos algo un poco ms dinmico. Aadiendo parmetros a las acciones de nuestros

    controladores, podemos pasar datos extra como segmentos a la URL. Vamos a aadir una accinde bienvenida a nuestro controlador:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    24/140

    Usando controladores 11

    1 /application/views/bienvenida.php

    Con el siguiente contenido:

    1 Hola!

    2

    Esta es la accin de bienvenida del controlador de cuenta.

    Ahora tenemos que devolver la vista desde nuestra accin de Bienvenida. Laravel tiene una formapreciosa y expresiva de hacerlo, vamos a verla:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    25/140

    Usando controladores 12

    Usando el mtodo with() podemos pasar cualquier valor (u objeto) a la Vista, y darle unpseudnimo para que podamos usarlo en la vista. Hemos usado lo mismo para el nombre delparmetro y el pseudnimo, pero puedes llamarlos como quieras!

    Ahora usamos estos datos en nuestra vista:

    1 Hola!

    2

    Bienvenido a , !

    Ahora nuestra accin funciona de la misma forma en que lo haca antes, solo que con mejorformato y un cdigo fuente ms bonito, separando toda la lgica de la capa visual.

    En vez de usar varios mtodos with(), puedes pasar una matriz como segundo parmetro amake() con parejas clave-valor. Esto puede ahorrarte algo de espacio consiguiendo el mismo

    resultado. He aqu un ejemplo:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    26/140

    Usando controladores 13

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    27/140

    Usando controladores 14

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    28/140

    4 Rutas con closuresEn este captulo usaremosRutas con closuresen vez deControladores con acciones. Si aunno has leido el captulo anterior sobre el uso de controladores, te recomiendo que empieces ahya que partiremos de lo que ya hemos aprendido en ese captulo.

    Las rutas nos permitan mapear nuestras URLs del framework a closures, lo cual es una forma muylimpia de contener nuestra lgica sin toda la parafernalia de clase. Las closures son funcionesannimas (function() {}). Pueden ser asignadas y tratadas como cualquier otra variable. Params informacin sobre Closures,revisa el artculo del API de PHP.

    4.1 Closures

    Vamos a echarle un vistazo a una ruta que enruta a una closure.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    29/140

    Rutas con closures 16

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    30/140

    Rutas con closures 17

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    31/140

    Rutas con closures 18

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    32/140

    Rutas con closures 19

    La clave para la matriz puede ser tanto before para ejecutar el filtro antes de la ruta, o afterpara ejecutarlo despus. Se pueden aplicar mltiples filtros separando sus nombres con una |(tubera). Por ejemploauth|csrf.

    Desde Laravel 3.1, si quieres aadir un filtro a un nmero de peticiones cuya URI coincida conun patrn especfico, usa la siguiente lnea:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    33/140

    5 Enlaces y URLsNuestra aplicacin puede volverse un poco aburrida si solo tenemos una nica pgina, y estoyseguro de que el usuario se enfadar rpidamente si tiene que andar escribiendo una URIcompleta para cambiar de pginas. Por suerte, los hiperenlaces estn aqu para salvarte el da.

    Si no has estado viviendo bajo una roca durante el ltimo par de dcadas, ya sabrs lo que son loshiper-enlaces, y no te aburrir con la explicacin tcnica. Antes de que podamos ver los enlaces,echemos un vistazo a cmo gestiona Laravel sus URLs.

    5.1 Obteniendo URLs

    Primero, vamos a echarle un vistazo a un problema. Habrs observado que los frameworks tienenestructuras de URL realmente nicas, algunos tienen un index.phpen ellos y otros no. Otrostendrn rutas complejas. En la mayora de los casos, usar una URL relativa como lo haras en otrositios te podra llevar a problemas graves a largo plazo. Si decides dar a todos URLs completas, ydecides mover la aplicacin ms tarde, puede que te encuentres abusando de la funcin de buscary reemplazar de tu editor favorito.

    Por qu no dejamos que Laravel haga todo el trabajo sucio? Laravel sabe la URL completa atu aplicacin, sabe cundo ests usando reescritura de URLs o no. Incluso sabe sobre tus rutas.Vamos a aprovecharnos de esa informacin usando la clase URL para generar algunas URLs delsitio.

    Comencemos buscando la URL a la raz de nuestra web. Podemos usar el mtodo base()paraello:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    34/140

    Enlaces y URLs 21

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    35/140

    Enlaces y URLs 22

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    36/140

    Enlaces y URLs 23

    1 http://miproyecto/css/estilo.css

    Estos mtodos son realmente tiles, pero Laravel va un paso ms all y nos da unoshelpersms

    cortos que quedan muy bien al usarlos en nuestras vistas. He aqu una lista de estos mtodoscortos, y sus alternativas ms largas.

    Helper Mtodo

    url() URL::to()asset() URL::to_asset()route() URL::to_route()action() URL::to_action()

    5.2 Generando enlacesAhora que podemos obtener los enlaces de nuestro sitio, el siguiente paso lgico sera usarlospara crear hiper-enlaces. S lo que ests pensando, puedo usar algo as:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    37/140

  • 8/10/2019 Laravel Codehappy Es Libre

    38/140

    6 FormulariosLos formularios son una parte importante de cualquier aplicacin web. Ayudan a controlar elflujo de la aplicacin, nos premiten recibir datos de nuestros usuarios y hacer decisiones queafectan a la funcionalidad de nuestras aplicaciones. Tambin es lo que ms odio en el mundoescribir.

    Afortunadamente para mi, la clase de formularios de Laravel se encarga de gran parte del trabajoduro dndonos tiles mtodos para generar elementos comunes de un formulario. Vamos a usarla clase formulario para crear un simple formulario web en una de nuestras vistas.

    6.1 Creando formularios

    1 // form.php

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    Para un momento, echa un vistazo al cdigo fuente del formulario porque no habrs visto nuncanada tan limpio. Dilo alto para ti mismo, vamos. Esperar.

    Nunca he visto un formulario tan limpio.

    Ests en lo cierto, es hermoso. Echemos un vistazo al cdigo generado para asegurarme de queno te estoy enseando mal, ya sabes para divertirnos?

    25

  • 8/10/2019 Laravel Codehappy Es Libre

    39/140

    Formularios 26

    1

    2

    3

    4 Usuario5

    6

    7

    8 Contrasea

    9

    10

    11

    12

    13

    14

    Genial, funcion! Quiero decir, por supuesto que lo hizo! Vamos a verlo lnea a lnea para vercmo funciona. En nuestra primera lnea tenemos el mtodo Form::open(), que crea una etiquetade apertura de formulario para nosotros.

    1

    El primer parmetro al mtodo es la URI a la que queremos enviar el formulario. El segundoparmetro es elMETHODusado para enviar el formulario. Si no facilitas uno como cadena, Laravel

    sume que quieres un formularioPOST

    , que es lo ms comn.El tercer parmetro tambin es opcional, puedes pasar una matriz de parejasatributo => valorpara aadir atributos extra a la etiqueta . Por ejemplo, si quisieras seleccionar el formulariocon JavaScript, querras pasararray('id' => 'miformulario')como tercer parmetro para daral elemento unaid.

    Para enviar un formulario a una URI segura (https) necesitars usar el mtodo open_secure()en vez deopen(). Acepta los mismos parmetros.

    Si quieres poder enviar ficheros a travs de tu formulario, tendrs que usar multipart/data,usa open_for_files() en vez del mtodo open(). Este mtodo tambin acepta los mismosparmetros.

    Finalmente, si quieres enviar un formulario a una URI segura y subir ficheros, tendrs que usarel mtodoopen_secure_for_files()que, una vez ms, acepta los mismos parmetros y es unacombinacin deopen_secure()y open_for_files().

    6.2 Aadiendo etiquetas

    La siguiente lnea contiene el mtodo Form::label() que es usado para crear un elemento. El primer parmetro es el namedel elemento inputque ser usado para el atributo

    for="". El segundo parmetro ser usado como contenido del elementolabel. Puedes pasar unamatriz como tercer parmetro opcional, para aplicar atributos HTML adicionales.

  • 8/10/2019 Laravel Codehappy Es Libre

    40/140

    Formularios 27

    6.3 Generando campos

    Despus, tenemos los generadores de campos. Estos mtodos ayudan a generar todos los

    elementos HTMLs que son comunes en los formularios. En el ejemplo anterior usamos losmtodos text() y password() para generar los elementos

    El mtodo radio()crea botones de opcin (radio) y comparten los mismos parmetros que elmtodocheckbox().

    Despus, tenemos los select, los elementos ms feos de todos los elementos de un formulario. Porsuerte, todo lo que tenemos que hacer es pasar un nombre, una matriz de clave => etiquetayun parmetro opcional para decidir qu opcin debera estar seleccionada por defecto al mtodoselect(). Nuestro select ser generado para nosotros, por ejemplo:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    41/140

    Formularios 28

    1

    2 Usuario

    3 Miembro

    4 Editor5 Administrador

    6

    Genial! Ahora es momento de enviar nuestro formulario.

    6.4 Generando botones

    Los mtodos generadoressubmit()ybutton(), aceptan ambos los mismos parmtros. Siendo el

    primero elvaluedel elemento HTML y el segundo la matriz abitual de atributos.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    42/140

    Formularios 29

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    43/140

    7 Gestionando la entrada de datosAhora que ya sabemos cmo crear formularios, tenemos que aprender cmo gestionar los datosque nos envan a travs de ellos. Como siempre, Laravel nos facilita una forma ultra-limpiade manejar esos datos. No hace falta interactuar con matrices de PHP como $_POST, $_GETni$_FILES. Seamos sinceros, eran horribles.

    7.1 Datos de peticiones

    Usemos la claseInputpara hacernos cargo de esto:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    44/140

    Gestionando la entrada de datos 31

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    45/140

    Gestionando la entrada de datos 32

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    46/140

    Gestionando la entrada de datos 33

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    47/140

    8 ValidacinLa validacin es una parte importante de muchas aplicaciones web. Nunca puedes fiarte de tususuarios, llevan tramando tu destruccin semanas abusando de tus formularios con JavaScriptmalicioso.

    No podemos dejarles ganar, no deben destruir nuestras preciosas aplicaicones. Validemos todoslos datos facilitados por los usuarios, de esa manera no podrn hacernos nada de dao.

    Naturalmente, Laravel tiene una librera, con el acertado nombre de Validationque har todoel trabajo duro por nosotros.

    8.1 Estableciendo una validacin

    Comencemos creando un formulario imaginario, cierra tus ojos e imagina un largo y bonitoformulario con muchos campos ohh ohh puedes volver a abrir los ojos?

    Bien, asumir que te cansaste de esperar, abriste los ojos y ests de vuelta conmigo y nuestroformulario imaginario. Vamos a obtener los datos de ese formulario.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    48/140

    Validacin 35

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    49/140

    Validacin 36

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    50/140

    Validacin 37

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    51/140

    Validacin 38

    not_in:rosa,morado

    Se asegura de que ninguno de los valores coincide con el facilitado.

    confirmed

    El valor del campo debe equivaler a un campo de confirmacin, nombrado con el formato

    accepted

    El valor debe ser igual a yes o 1. til para validar casillas de verificacin.

    same:edad

    El campo debe ser igual al campo especificado en la misma regla.

    different:edad

    El campo no debe coincidir con el campo especificado en la misma regla.

    match:/[a-z]+/

    El campo debe coincidir con la expresin regular facilitada.

    unique:usuarios

    Este es uno de mis favoritos. El validador buscar en la tabla de la base de datos usersy seasegurar de que el valor es nico en la columna que tiene el mismo nombre. til para asegurartede que no existan los nombres de usuario o correos duplicados.

    Si quieres espeficicar un nombre de columna, simplemente psalo como segundo parmetro:

    1 unique:usuarios,apodo

    Tambin puedes forzar la regla para que ignore un determinado id pasndolo como tercerparmetro.

    1 unique:usuarios,apodo,5

    exists:colores

    Acta al contrario que unique. El valor debe existir en la tabla de la base de datos. De nuevo,

    puedes pasar un segundo parmetro para referirte a otra columna.

    before:1984-12-12

    La fecha facilitada por el campo, debe haber ocurrido antes de la plantilla facilitada a la reglabefore.

    Los filtros before y after usan strtotime() para calcular una marca de tiempo para lacomparacin. Lo cual implica que puedes usar ciertos trucos como:

    1 before:next Thursday

  • 8/10/2019 Laravel Codehappy Es Libre

    52/140

    Validacin 39

    Por desgracia, yo fui el que aadi esta funcionalidad por lo que si se rompe puedes venir agritarme lo siento!

    after:1984-12-12

    Similar abefore, solo que la fecha debe haber ocurrido despus de la fecha facilitada a la reglaafter.

    email

    El valor debe ser una direccin de correo vlida.

    url

    El valor debe coincidir con el formato de una URL.

    active_url

    El valor debe coincidir con una URL vlida y activa. Se usar checkdnsrpara verificar que laURL est activa.

    mimes:png,mp3

    El valor debe ser un archivo en $_FILEcuyo tipo MIME coincide con las extensiones de archivofacilitadas. Puedes aadir tipos de MIME adicionales a la matriz enconfig/mimes.php.

    image

    El archivo subido debe ser una imagen.

    8.4 Mensajes de error personalizadosPara mi gusto, los mensajes de error son bastante descriptivos, pero tus clientes pueden tener suspropias ideas, o puede que necesites traducirlos. Veamso cmo podemos personalizar nuestrosmensajes de error para ajustarlos a nuestras necesidades.

    Puedes editar los mensajes de errores de validacin modificando el archivo directamente enapplication/language/en/validation.php

    1 ...

    2 "after" => "The :attribute must be a date after :date.",3 "alpha" => "The :attribute may only contain letters.",

    4 "alpha_dash" => "The :attribute may only contain letters, numbers, and \

    5 dashes.",

    6 ...

    Laravel reemplaza el marcador:attributecon el nombre del campo. Existen otros marcadoresen las reglas aunque su propsito es bastante comprensible a simple vista.

    Si prefieres cambiar los mensajes para un nico formulario, en vez de editarlos globalmente,puedes pasar una tercera matriz de mensajes al mtodoValidator::make().

  • 8/10/2019 Laravel Codehappy Es Libre

    53/140

  • 8/10/2019 Laravel Codehappy Es Libre

    54/140

  • 8/10/2019 Laravel Codehappy Es Libre

    55/140

    9 MigracionesInciialmente, intent incluir una gua al constructor de consultas Fluent en este captulo, pero creoque el captulo se volvi demasiado largo por lo que decid cubrir nicamente la configuracin dela base de datos y las migraciones en este captulo. Preprate para una buena y larga explicacinsobre Fluent en el prximo captulo.

    Las migraciones son una de las caractersticas que ms me gustan de Laravel. Odio escribir SQLy la claseSchemame permite crear mis tablas de forma sencilla, sin escribir una sola lnea de eserepugnante lenguaje! Y no solo eso, el cdigo de Schemaes precioso y se lee como un libro.

    Si no te has encontrado con las migraciones antes, son una forma de describir cambios a tubase de datos, en archivos, para que los diferentes entornos/instalaciones de tu aplicacin estnal tanto del esquema actual. Los cambios al esquema tambin pueden ser revertidos o hacerles

    marcha atrs. Las migraciones tambin pueden ser usadas para rellenar datos en tablas condatos de ejemplos.

    9.1 Configuracin de la base de datos

    Dirgete al archivo de configuracin application/config/database.php. Si alguna vez hasinstalado una aplicacin PHP, estars familiarizado con este tipo de archivos. Tienes tus datosde acceso a la base de datos a mano, verdad? Si no, ve a buscarlos ahora mismo!

    Ya has vuelto? Genial, vamos a empezar a profundizar.

    Desplzate hasta la clave connectionsde la matriz, donde vers un nmero de opciones paraunos pocos de tipos de bases de datos. Rellena los parmetros de conexin para la base de datosde tu eleccin. Yo voy a empezar con la tpica base de datos de MySQL.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    56/140

    Migraciones 43

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    57/140

  • 8/10/2019 Laravel Codehappy Es Libre

    58/140

    Migraciones 45

    Llamamos al mtodo create()en la clase Schemapara crear una nueva tabla, como parmetropasamos el nombre de la tabla que vamos a crear, y una closure como segundo parmetro.Tambin necesitamos pasar un parmetro a la closure, puedes llamarlo como quieras, pero me

    gusta usar$tablaporque creo que hace que el cdigo se lea mejor.Dentro de la closure, podemos usar el parmetro $tablapara crear nuestros campos con un buennmero de mtodos bien nombrados. Echmosles un vistazo.

    increments()

    Aade un ID autoincremental a la tabla. La mayora de tus tablas lo tendrn!

    string()

    Crea un campoVARCHAR.stringsuena mejor, verdad?

    integer()

    Aade un campo del tipo entero a la tabla.

    float()

    Aade un campo del tipo float a la tabla.

    boolean()

    Aade un campo del tipo booleano a la tabla.

    date()

    Aade un campo de tipo fecha a la tabla.

    timestamp()Aade un campo de tipo timestamp a la tabla.

    timestamps()

    Aade los camposcreated_aty updated_ata la tabla para indicar cando se cre y actualiz(respectivamente) el registro.

    text()

    Aade un campo de tipo texto a la tabla.

    blob()

    Aade un campo de datos blob a la tabla.

    Tambin puedes usar el mtodo encadenable ->nullable(), para permitir que el campo recibavalores del tipoNULL.

    Los detalles completos sobre los parmetros disponibles para los mtodos arriba detallados,podis encontrarlos en ladocumentacin oficial.

    Genial, ahora hemos creado nuestra tabla! Teniendo en cuenta que hemos creado la tabla en elmtodoup(), ahora tenemos que hacer DROPa la tabla en el mtodo down(), para que el esquemavuelva a su estado original en caso de marcha atrs. Por fortuna, la clase Schema tiene otro mtodoque es perfecto para esta tarea.

    http://laravel.com/docs/database/migrations

    http://laravel.com/docs/database/migrationshttp://laravel.com/docs/database/migrationshttp://laravel.com/docs/database/migrationshttp://laravel.com/docs/database/migrations
  • 8/10/2019 Laravel Codehappy Es Libre

    59/140

    Migraciones 46

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    60/140

    10 Fluent Query BuilderFluent es otra genial librera que Laravel facilita para ayudarme a esquivar la bala del SQL.Aunque aun puedes escribir consultas SQL a pelo si te gusta el dolor. Que qu es lomejor de usar Fluent? Aparte de la falta de SQL, es que usa sentencias preparadas, que estncompletamente protegidas contra ataques de inyeccin SQL. Fluent es tambin bueno, fluido,en varios dialectos SQL por lo que tus mtodos funcionarn en una variedad de bases de datos.Antes de que empecemos tendrs que entender el concepto de encadenado. Echa un ojo a esteejemplo.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    61/140

    Fluent Query Builder 48

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    62/140

    Fluent Query Builder 49

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    63/140

    Fluent Query Builder 50

    1 SELECT * FROM usuarios WHERE usuario = 'dayle' OR cara LIKE '%modelomasculi\

    2 no%';

    Ahora no necesito explicar cmo funciona cada caracterstica de SQL. Hay multitud de librospara ello, pero voy a nombrar los mtodos usados para cumplir tareas comunes:

    Usa los mtodos where_in(), where_not_in(), or_where_in() y or_where_not_in() paracomparar un campo con una matriz de elementos.

    Los mtodoswhere_null(),where_not_null(),or_where_null(), yor_where_not_null()paracomparar un campo con un valorNULL.

    A veces querrs anidar clusulaswhereentre s. Laravel provee funcionalidad para esto en formade Clusulas Where anidadas. Vamos a ver un cdigo de ejemplo de la documentacin oficial:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    64/140

    Fluent Query Builder 51

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    65/140

    Fluent Query Builder 52

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    66/140

    Fluent Query Builder 53

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    67/140

  • 8/10/2019 Laravel Codehappy Es Libre

    68/140

    Fluent Query Builder 55

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    69/140

    11 ORM EloquentUn ORM es un paquete realmente til. Son las siglas para Mapeo objeto-relacional (ObjectRelational Mapper). Suena muy complicado, verdad? Vayamos por partes. La parte de mapeo,es porque estamos mapeando nuestros objetos PHP o clases a tablas y filas de la base da datos.La parte Relacioinal quedar ms clara en la seccin de relaciones.

    Hay muchas soluciones de ORM, pero ninguna tan elocuente como bueno, Eloquent. Eloquentviene con Laravel y puede ser usado sin modificar nada. Para esta parte, voy a asumir queconfiguraste tu base da datos, como describimos en el captulo de Migraciones, y que estsfamiliarizado con los mtodos y encadenado del captulo de Fluent Query Builder. Vamos abasarnos en ellos.

    Vers que Eloquent es una alternativa a usar Fluent, pero comparte mucho de sus mtodos. La

    nica diferencia es que vamos a interactuar con modelos de Eloquent, pero comparten muchosde los mtodos, en vez de los stdObject que obtenemos de Fluent. Va a hacer que nuestrocdigo parezca incluso ms claro. Vamos a sumergirnos directamente y revisemos el modelode Eloquent.

    11.1 Creando y usando modelos de Eloquent

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    70/140

    ORM Eloquent 57

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    71/140

    ORM Eloquent 58

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    72/140

    ORM Eloquent 59

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    73/140

    ORM Eloquent 60

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    74/140

  • 8/10/2019 Laravel Codehappy Es Libre

    75/140

    ORM Eloquent 62

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    76/140

    ORM Eloquent 63

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    77/140

    ORM Eloquent 64

    11.3 Insertando modelos relacionados

    Cuando estamos insertando modelos relacionados, podemos establecer las claves forneas

    usuario_id o sombrero_id nosotros mismos, pero no es demasiado bonito. Por qu no lepasamos el objeto?:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    78/140

    ORM Eloquent 65

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    79/140

    ORM Eloquent 66

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    80/140

    ORM Eloquent 67

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    81/140

    ORM Eloquent 68

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    82/140

    12 EventosLos eventos son una forma de permitir a otras porciones de cdigo extender tus aplicaciones deforma elegante. Algunas aplicaciones se refieren a este tipo de extensiones como Hook. Si eresun Gur PHP puede que encuentres parecido al patrn de diseo de Observador / Observable.

    Los eventos pueden tener cualquier nmero de escuchadores, y ejecutarlos puede devolver unvariado nmero de respuestas. Creo que la mejor forma de aprender ser verlo en accin. Vamosa ver con ms detalle los Eventos en Laravel.

    12.1 Activa un evento

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    83/140

    Eventos 70

    12.2 Escucha un Evento

    Para escuchar un evento, usamos probablemente lo hayas adivinado. El mtodolisten(). Le

    damos el nombre del evento que estamos buscando como cadena y una closure que se ejecutecuando el evento haya sido activado. El resultado de la closure ser pasado de vuelta comorespuesta. Echemos un vistazo..

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    84/140

    Eventos 71

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    85/140

    Eventos 72

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    86/140

    13 Plantillas BladeEl motor de plantillas de Laravel, Blade, te permite usar una bonita sintaxis para incluir cdigoPHP en tus vistas. Tambin incluye un nmero de atajos que permiten el usao de caractersticasexistentes de Laravel. Las plantillas Blade son cacheadas por defecto, lo cual las hace muyrpidas!

    Como siempre, vamos al lo!

    13.1 Lo bsico

    Para activar las plantillas de Blade, tendrs que nombrar tus vistas con la extensin .blade.php

    en vez de.php. Tan sencillo como eso!Cuando usamos los archivos de vista en los frameworks PHP, a menudo te encontrars haciendoesto

    1

    Activando las etiquetas cortas de PHP podemos recortarlo un poco

    1

    no obstante aun podemos mejorar. Echemos un vistazo a cmo podramos hacerlo con Blade.

    1 {{ $val }}

    Precioso! El espacio entre las llaves es opcional, pero creo que se ve mejor con el espacio. Elcontenido de las dobles llaves es evaluado y volcado. Puedes usar cualquier PHP que quierasdentro. Por ejemplo

    1 {{ 5 * time() }}

    Este cdigo funcionar tambin. Todo lo que hace Laravel es convertir{{ $val }}a. Asegrate de considerar esto si te metes en problemas con Blade!

    13.2 Lgica

    Qu pasa con los bucles foreach()?, uso montones de ellos! Tambin uso muchos if y else.Blade simplifica todas estas sentencias condicionales con el uso del mgico signo @. Echemos un

    vistazo.

    73

  • 8/10/2019 Laravel Codehappy Es Libre

    87/140

  • 8/10/2019 Laravel Codehappy Es Libre

    88/140

  • 8/10/2019 Laravel Codehappy Es Libre

    89/140

    Plantillas Blade 76

    contenido de regiones de contenido, con el cdigo que se encuentre entre ambos mtodos.

    En el caso de la seccin de navegacion, descubrirs que hay una etiqueta @parentdentro delarea de contenido. Blade la reemplazar con el contenido de la plantilla bsica.

    Si devolvemos..

    1 return View::make('page');

    Desde nuestra ruta/accin, ahora podemos ver nuestra pgina dentro de la plantilla layout. Algocomo esto

    1

    2

    3

    4 5 Pgina de Dayle!

    6

    7

    8

    9

    10 Inicio

    11 Blog

    12 Sobre mi

    13

    14 15

    16 Bienvenido!

    17

    Bienvenido a la pgina web de Dayle!

    18

    19

    20

    Genial! Tambin podemos usar cuantas plantillas como queramos. Son vistas normales de Blade!

    Qu pasa si queremos facilitar contenidos a una @sectiondesde nuestra Ruta/Accin? Sim-

    plemente llama al mtodo Section::inject() con el nombre de la seccin, y una cadenarepresentando el contenido de la seccin para que sea inyectado en la vista.

    1 Route::get('/', array('do' => function()

    2 {

    3 Section::inject('title', 'Mi sitio');

    4

    5 return View::make('page');

    6 }));

    Y eso es todo! Ahora puedes usar Blade para hacer que tus vistas se vean realmente limpias yeficientes. Tu diseador te amar por ello.

  • 8/10/2019 Laravel Codehappy Es Libre

    90/140

    14 AutentificacinMuchas aplicaciones querrn una capa de autentificacin. Si ests escribiendo un blog, no querrsque tus lectores puedan publicar nuevos artculos. O si ests trabajando con datos sensibles, noquerrs que los usuarios sin autorizacin tengan acceso a estos.

    Por suerte, Laravel tiene una clase de autentificacin simple, segura y altamente personalizable.Vamos a echar un ojo a cmo podemos interactuar con ella.

    14.1 Configuracin

    Antes de que empecemos, tendrs que crear una nueva tabla para guardar los detalles de

    nuestros usuarios. Podemos nombrar esta tabla como queramos, pero si la nombramos usersno tendremos que cambiar el archivo de configuracin. He aqu como crear una tabla adecuadacon el constructor de esquema.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    91/140

    Autentificacin 78

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    92/140

    Autentificacin 79

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    93/140

    Autentificacin 80

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    94/140

    Autentificacin 81

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    95/140

    Autentificacin 82

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    96/140

    Autentificacin 83

    iniciado sesin. Eso es por lo que cre el filtro auth, que est incluido en Laravel como estndar.Echemos un vistazo al filtro en s que puedes encontrarlo en routes.php.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    97/140

    Autentificacin 84

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    98/140

    Autentificacin 85

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    99/140

    15 El tutorial del BlogFinalmente ha llegado el momento de escribir nuestra primera aplicacin completa. Si no hasledo los otros captulos, puede que encuentres esto un poco difcil. Vamos a ver lo que vamos ausar para crear el blog.

    Rutas

    Migraciones

    Eloquent

    Plantillas de Blade

    Autentificacin

    Filtros

    Veamos el plan y organicemos lo que vamos a crear.

    15.1 El diseo

    Vamos a crear un blog de tres pginas. La primera pgina consistir en un listado de posts, similara la primera pgina de un blog de Wordpre Wordpush. La siguiente pgina ser la pgina avista-completaa la que llegas haciendo click a un artculo que quieres leer. La pgina final esaquella en la que escribimos nuestros artculos. Normalmente, tendras la habilidad de editar o

    borrar artculos, pero podemos aadir todo eso ms tarde. No estoy contando la pgina habitualde login, ya que es usada en cualquier aplicacin que implemente autentificacin.

    Pensemos en el esquema de la base de datos un momento. Sabemos que vamos a necesitar unatabla para almacenar nuestros artculos. Tambin tendremos una tabla para almacenar nuestrosusuarios, y vamos a necesitar alguna forma de relacin entre ambos. Vamos a pensar en loscampos:

    Tabla : posts

    Campo Tipo

    id INTEGER title VARCHAR(128)body TEXTauthor_id INTEGERcreated_at DATETIMEupdated_at DATETIME

    Tabla : users

    Campo Tipo

    id INTEGER

    username VARCHAR(128)nickname VARCHAR(128)

    86

  • 8/10/2019 Laravel Codehappy Es Libre

    100/140

    El tutorial del Blog 87

    password VARCHAR(64)created_at DATETIMEupdated_at DATETIME

    Pinta bien. Podemos usar el campo author_iden el objetoPostpara hacer referencia al objetoUserque representa el autor de un artculo.

    Bien, a trabajar!

    15.2 Configuracin bsica

    Antes que nada, tendrs que configurar tu base de datos y el driver de sesin. Deberas saberhacerlo en este punto del libro. Usar MySQL como base de datos como siempre.

    Ahora creemos migraciones para nuestras tablas usando Artisan como hicimos en el captulo demigraciones.

    1 php artisan migrate:make create_users

    Nuestro esquema paraup()con la cuenta de usuario por defecto:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    101/140

    El tutorial del Blog 88

    1 php artisan migrate:make create_posts

    El esquema paraup():

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    102/140

    El tutorial del Blog 89

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    103/140

  • 8/10/2019 Laravel Codehappy Es Libre

    104/140

    El tutorial del Blog 91

    distribucin de blade. De hecho esta es una buena prctica, re-usa todo lo que puedas y te harscon tu propio kit de desarrollo de Laravel.

    pages/login.blade.php

    1 @layout('templates.main')

    2

    3 @section('content')

    4 {{ Form::open('login') }}

    5

    6

    7 @if (Session::has('login_errors'))

    8 Username or password incorrect.

    9 @endif

    1011

    12

    {{ Form::label('username', 'Username') }}

    13

    {{ Form::text('username') }}

    14

    15

    16

    {{ Form::label('password', 'Password') }}

    17

    {{ Form::password('password') }}

    18

    19

    20

    {{ Form::submit('Login') }}

    21

    22 {{ Form::close() }}

    23 @endsection

    Como puedes ver, nuestro formulario de login est usando nuestra distribucin recin creada.Vamos a crear el formulario de Crear nuevo artculo.

    pages/new.blade.php

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    105/140

  • 8/10/2019 Laravel Codehappy Es Libre

    106/140

    El tutorial del Blog 93

    Vamos a crear la ruta de cierre de sesin para que podamos probar el proceso de inicio de sesinal completo.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    107/140

    El tutorial del Blog 94

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    108/140

    El tutorial del Blog 95

    16 'title' => 'required|min:3|max:128',

    17 'body' => 'required'

    18 );

    1920 // Hagamos la validacin

    21 $v = Validator::make($new_post, $rules);

    22

    23 if ( $v->fails() )

    24 {

    25 // redirigimos al formulario con los errores

    26 // entrada de datos y el usuario que

    27 // ha iniciado sesin actualmente

    28 return Redirect::to('admin')

    29 ->with('user', Auth::user())

    30 ->with_errors($v)

    31 ->with_input();

    32 }

    33

    34 // Crea el nuevo artculo

    35 $post = new Post($new_post);

    36 $post->save();

    37

    38 // Redirigimos a la vista de nuestro artculo

    39 return Redirect::to('view/'.$post->id);

    4041 });

    Ahora deberamos poder crear algunos artculos en el blog. nimo! Escribe algunos artculospara que tengamos algo que ver en nuestra vista de lista de todos los artculos.

    Hablando de eso, vamos a trabajar sobre esa vista.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    109/140

    El tutorial del Blog 96

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    110/140

    El tutorial del Blog 97

    Editar / Borrar artculos

    Aadir la funcionalidad de editar o eliminar artculos no sera demasiado trabajo, y nos permitiraque se realizara mantenimiento en el blog.

    Slugs de la URL

    Podramos crear slugs de las URLs de los artculos para usarlas en vez de las ids en nuestrasURLs lo cual nos dejara una mejor optimizacin para buscadores.

  • 8/10/2019 Laravel Codehappy Es Libre

    111/140

    16 Pruebas unitariasLas pruebas unitarias pueden ser muy tiles para un desarrollador web. Se pueden usar pararevisar si aadir una nueva caracterstica o modificar el cdigo base de alguna forma, haalterado de manera accidental alguna otra caracterstica, provocando que esta falle. Algunosdesarrolladores incluso practican un desarrollo orientado a las Pruebas, donde las pruebas sonescritas antes que el cdigo para asegurar que el cdigo escrito cumple con todos los requisitos.

    Laravel nos ofrece el directoriotestspara albergar todas las pruebas de tu aplicacin e inclusoaade un comando de ayuda a la interfaz de Artisan para ejecutar pruebas de PHPUnit.

    No solo podemos probar la aplicacin sino que los bundles tambin pueden contener sus propiaspruebas. De hecho, Laravel tiene un bundle dedicado a las pruebas de caractersticas del ncleodel frameowrk. Puede ser encontradoen el repositorio de pruebas de Github de Laravel.

    16.1 Instalacin

    No, no vamos a cubrir nuevamente la instalacin de Laravel!

    Laravel usa el software PHPUnit para ejecutar sus pruebas. Antes de poder usar las caractersticasde pruebas unitarias de Laravel, tendremos que instalar este software.

    La instalacin de PHPUnit puede variar entre distintos sistemas operativos, por lo que creoque sera mejor mirar la documentacin oficial de PHPUnit para encontrar las instrucciones

    de instalacin apropiadas. Puedesencontrar la pgina de instalacin aqu.

    16.2 Creando una prueba

    Echemos un vistazo a un caso de prueba. Por suerte, Laravel ha incluido un caso de ejemplopara nosotros!

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    112/140

    Pruebas unitarias 99

    13 {

    14 $this->assertTrue(true);

    15 }

    1617 }

    Como puedes ver, creamos nuestros casos de prueba en un archivo con la extensintest.php, elnombre de la clase debe comenzar con la palabra claveTesty debe extender la clasePHPUnit_-Framework_TestCase. Estas limitaciones no estn impuestas por Laravel si no por PHPUnit.

    Una prueba de PHPUnit puede contener cualquier nmero de prueba, como acciones camelcase,con la palabra test como prefijo. Nuestras pruebas pueden contener un distinto nmero deaserciones que deciden si nuestras pruebas pasan o fallan.

    Puedes encontrar una lista completa de asercionesen la documentacin de PHPUnit.

    16.3 Ejecutando pruebas

    Las pruebas pueden ser ejecutadas usando la interfaz de lnea de comandos Artisan. Simplementeusa el comandotestpara ejecutar todas las pruebas.

    1 php artisan test

    y el resultado

    1 PHPUnit 3.6.10 by Sebastian Bergmann.

    2

    3 Configuration read from /home/daylerees/www/laravel/develop/phpunit.xml

    4

    5 .

    6

    7 Time: 0 seconds, Memory: 6.25Mb

    8

    9 OK (1 test, 1 assertion)

    Con la parteOKen verde, estamos seguros de que todas las pruebas han tenido xito.

    Por supuesto sabamos que la prueba tendra xito porque estamos usando el mtodo assertTrue()para revisar el valortrue. No hay forma de que eso pudiera fallar.

    Vamos a fastidiar la prueba para que falle. Vamos a cambiar el parmetro a false.

    http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions

    http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertionshttp://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertionshttp://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertionshttp://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions
  • 8/10/2019 Laravel Codehappy Es Libre

    113/140

  • 8/10/2019 Laravel Codehappy Es Libre

    114/140

    Pruebas unitarias 101

    1 php artisan test:core

  • 8/10/2019 Laravel Codehappy Es Libre

    115/140

    17 CachLaravel ofrece una clase muy simple para usar la Cach, permitindote cachear todo lo quenecesites durante tanto tiempo como necesites. Confuso? Echmosle un vistazo en accin.

    17.1 Configuracin

    Hay muchas formas de almacenar tus datos cacheados pero debes establecer un driver que elija elmtodo que quieres usar enapplication/config/cache.php. Las opciones sonfile,memcached,apc,redisy database. Puede que obtengas mejor rendimiento conapco memcachedpero voy ausar la cach basada enfilepor la simplicidad de su configuracin.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    116/140

    Cach 103

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    117/140

    18 Autocarga de clasesCon muchos frameworks, saber dnde poner tus archivos y cmo cargar definiciones de clasespuede ser un tema complicado. Sin embargo, con Laravel no hay reglas estrictas que se apliquena la estructura de tu aplicacin. El auto loader de Laravel es una librera inteligente que simplificala carga de clases con convenciones de nombrado de subcarpetas. Es lo suficientemente flexiblepara gestionar la adicin de libreras o paquetes complejos con facilidad. Echemos un vistazo alas funciones que tenemos disponible.

    18.1 Asociacin

    La asociacin es el mtodo ms simple de cargar clases. Puedes pasar al auto loader una matriz

    de nombres de clases con ubicaciones de archivos en forma de parejas clave-valor y Laravel seencargar del resto. El eficiente autoloader solo cargar la clase requerida cuando se use la clase.Por defecto, las asociaciones del Autoader se establecen en el archivo start.php. Sin embargopuedes usar la clase desde cualquier parte, pero el archivo start.phpes una buena eleccindebido a que se carga muy pronto. Echemos un vistazo a la asociacin:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    118/140

  • 8/10/2019 Laravel Codehappy Es Libre

    119/140

    Autocarga de clases 106

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    120/140

    19 ConfiguracinLaravel tiene muchos archivos de configuracin en application/configpara configurar casitodas las caractersticas que ofrece el framework. No sera genial si t pidieras crear tus propiosarchivos de configuracin de la misma forma? Bueno, hoy es tu da de suerte, porque puedes!

    19.1 Creando nuevos archivos de configuracin

    Los archivos de configuracin son simplemente archivos PHP que se encuentranen application/configo en un subdirectorio, y devuelven una matriz PHP. Por ejemplo:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    121/140

    Configuracin 108

    Estoy seguro de que puedes hacer una descripcin mejor. Te habrs dado cuenta de que losarchivos de configuracin de Laravel estn en parejas de clave-valor. El ndice representa laclave, y el valor su valor.

    El valor del ajuste puede ser cualquier valor u objeto que PHP soporte. Incluso puede ser unaclosure. Facilitando una closure puedes hacer fcil al usuario cambiar la configuracin haciendoque se cargue desde otra fuente. Por ejemplo:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    122/140

    Configuracin 109

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    123/140

    20 El contenedor IoCEl contenedor IoC es un tema complicado. Mucha gente est confundida por su descripcinen la documentacin y por un corto perodo de tiempo, yo estaba entre esa gente. Tras muchainvestigacin y el apoyo de la fantstica comunidad de Laravel (nete a nosotros en #laravel enel IRC de freenode) he conseguido aclarar el tema con xito. Espero poder arrojar algo de luzsobre este misterioso tema.

    IoC son las siglas para Inversin de Control. No quiero complicar las cosas con una descripcincompleta. Hay demasiados artculos en la red que cubrirn el lado ms complicado de este tema.En vez de eso, piensa en el contenedor como Invertir el Control o Devolver el control a Laravelpara resolver nuestros objetos.

    Esto es de lo que trata el contenedor, de resolver objetos. Aparte de su uso para inyectar

    dependencias para usarlos en pruebas unitarias, puedes hacerte a la idea de que el ContenedorIoC es un atajo para resolver objetos complejos o seguir un patrn singleton sin la habitualclase asociada al patrn. Hablaremos ms de singleton ms tarde. Echemos un vistazo a cmoregistrar objetos en el contenedor.

    20.1 Registrando objetos

    Usemos nuestra imaginacin. Como el gran dinosaurio morado nos ense en la tele. Vamos aimaginarnos una clase llamada Luzambiental que ser usada por toda nuestra aplicacin para

    algn oscur luminoso propsito.Por desgracia, nuestra clase de Luzambiental necesita mucha configuracin antes de poderusarla. Echmosle un vistazo.

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    124/140

    El contenedor IoC 111

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    125/140

    El contenedor IoC 112

    20.3 Singletons

    Resolver nuestraLuzAmbientales til, pero ?qu ocurre si instanciar LuzAmbientales realmente

    costoso en recursos o solo debera ser instanciada una vez? El mtodo registerno ser tilen este caso teniendo en cuenta que la closure es ejecutada con cada llamada a resolve()yse devuelve una nueva instancia del objeto cada vez. Es aqu donde entra en juego el patrnsingleton.

    El patrn de diseo Singleton, implica escribir tus clases de una determinada forma para quepuedan ser llamadas usando un mtodo esttico y siempre devolver la misma instancia de smismo. De esta forma la clase solo queda instanciada una vez.

    Para ms informacin sobre el patrn de diseo Singleton, te sugerira que hicieras una rpidabsqueda en Google o revises el API de PHP que tiene un artculo sobre el tema.

    Singleton puede ser til, pero necesita una cierta estructura de clase para poder usarlo. Elcontenedor IoC tiene un mtodo singleton()que hace el proceso mucho ms sencillo y nonecesita ningn tipo especial de clase. RegistremosLuzAmbientalcomo singleton:

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    126/140

    El contenedor IoC 113

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    127/140

  • 8/10/2019 Laravel Codehappy Es Libre

    128/140

    Encriptacin 115

    1

  • 8/10/2019 Laravel Codehappy Es Libre

    129/140

    22 Contenido AJAXLas aplicaciones web modernas no tienen el tiempo para esperar a la siguiente peticin HTTP.JavaScript ha cambiado la forma en la que navegamos, queremos que nuestro contenido seactualice de forma automtica. Queremos publicar informacin sin tener que recargar la pgina.

    En el canal IRC de Laravel somos preguntados a menudo cmo usar AJAX con Laravel, lo cualparece confuso porque la respuesta es realmente simple como cualquier otra peticin HTTP.Vamos all y veamos algunas peticiones AJAX usando el framework. Vamos a necesitar haceralgunas peticiones HTTP con JavaScript. Como puede ser algo feo, he decidido usar el frameworkde JavaScript, jQuery en estos ejemplos.

    22.1 Plantilla de la pginaNecesitaremos una vista, o plantilla de pgina que sirva como primera peticin. Dejemos algomuy bsico.

    1

    2

    3

    4

    5

    6 Mi pgina Ajax7

    8

    9

    10

    Hola y bienvenido al sitio!

    11

    12 Cargar contenido

    13

    14

    Ahora tenemos un rea de contenido definida en un elemento con la id de content. Esah donde vamos a cargar nuestro futuro contenido. Tambin tenemos un enlace con la iddeload-contentqu