Documente Academic
Documente Profesional
Documente Cultură
Francisco kataldo
www.kataldo.com
Pasos para comenzar a
trabajar con laravel
3 Instalar composer
php -r "copy('https://getcomposer.org/
installer', 'composer-setup.php');"
php -r "if (hash_file('sha384',
'composer-setup.php') ===
'a5c698ffe4b8e849a443b120cd5ba38043260d5
c4023dbf93e1558871f1f07f58274fc6f4c93bcf
d858c6bd0775cd8d1') { echo 'Installer
verified'; } else { echo 'Installer
corrupt'; unlink('composer-
setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
App Storage
Contiene el código fuente de la aplicación. contiene vistas compiladas, archivos en cache,
Casi todas las clases que crearemos estarán acá. sesiones.
Database
guarda factories, Migrations y seeds
Public
contiene index.php: es el punto de entrada de
todas las peticiones a nuestra aplicación, es el
único directorio accesible publicamente.
Resources
contiene las vistas y archivos no compilados
como css, js e imágenes
Routes
Contiene las instrucciones de las rutas de
nuestra aplicación
Routes: Rutas en
laravel
Los Routes en Laravel son una de las capas más importante
en el Framework, es un sistema de rutas que se encargan
de manejar el flujo de solicitudes y respuestas, desde y
hacia el cliente (como hacia el navegador, por ejemplo).
Definen la dirección URL y el método por el cual se puede
ingresar a dicha ruta (GET, POST, etc.)
1 routes/web.php:
En este archivo de rutas es donde definimos
todas las rutas de nuestra aplicación web que
pueden ser ingresadas por la barra de
direcciones del navegador.
2 routes/channels.php:
Aquí definimos los canales transmisión de
eventos. Por ejemplo, cuando realizamos
notificaciones en tiempo real.
3 routes/console.php:
En el archivo de rutas console.php definimos
comandos de consola que pueden interactuar
con el usuario u otro sistema.
4 routes/api.php:
En este archivo se definen todas las rutas de las
APIs que puede llegar a tener nuestra aplicación.
Routes: Ejemplo Routes: Pasando
Rutas web parámetros por Url
routes/web.php routes/web.php
2 Función anónima:
routes/web.php
Debemos pasarle una función anónima que será Route::get('saludo/{nombre}', function ($nombre) {
});
Route::get('/', function() {
Si necesitamos que el parámetro por url sea opcional debemos agregar un signo
return "hola desde el home";
de interrogación (?) al final del parámetro de url y darle un valor por defecto a la
});
variable $nombre. Entonces, si no agregamos un parámetro en la url del
navegador el resultado nos mostrará “Saludo Invitado” ya que este está por
defecto, en caso de darle un parámetro saludara al dato que le pasamos por url
});
})->name('contactos'); Nombre de la ruta De este modo si quisiéramos cambiar el nombre ‘contacto’ a ‘contactanos’
podemos hacerlo sin perder la referencia y sin tener cambiar cada uno de los 100
links.
2 Ruta home:
En la ruta de nuestro home / tenemos 5 links
que referencian al nombre de nuestra ruta, en
lugar de hacerlo a la url es decir:
<html lang="es”>
Para crear una nueva vista vamos a la ruta resources/views
<head>
y creamos un nuevo archivo siguiendo la nomeclatura del ya existente, en este <meta charset="UTF-8">
caso lo llamaremos home, por lo tanto el nuevo archivo tendrá como nombre <meta name="viewport" content="width=device-width, initial-
home.blade.php
scale=1.0">
})->name('home');
})->name('home');
En forma de array [ ]
Segundo parámetro
routes/web.php
En cambio laravel nos provee de una mejor forma de hacerlo
Route::view('/', 'home')->name('home');
view directamente en
route Nombre de la ruta
Si la variable no tiene un valor
definido nos muestra invitado por
default
Routes: Compartiendo
elementos entre rutas y
vistas
Route::view('/nosotros', 'nosotros')->name('nosotros');
Route::view('/portafolio', 'portafolio')->name('portafolio');
Route::view('/contacto', 'contacto')->name('contacto');
resources/views/
Cada vista creada, tiene dentro solo un html con un h1 que contiene el nombre
de la vista. Home, nosotros, portafolio y contacto respectivamente.
Views: Compartiendo
elementos entre rutas y
vistas - Blade, el motor
de plantillas de Laravel
Para navegar entre las vistas nos será necesario crear un menu de navegación, Creando los elementos que se repiten
para este método es imprecindible usar el motor de plantillas blade.
Ahora que tenemos nuestro archivo layout con contenido básico, creamos
nuestro menu y eliminamos el contenido H1 y la variable que habíamos puesto
¿Cómo sabemos que estamos usando blade?
anteriormente. Esto nos da como resultado, lo siguiente.
Al crear una nueva vista SIEMPRE agregamos la extención BLADE.PHP
de esta manera nuestro archivo php estará siendo compilado por el motor de
laravel, Blade.
resources/views/layout.blade.php
<!DOCTYPE html>
Como indicaba anteriormente, usaremos Blade para crear nuestros elementos
<html lang="en">
que se repiten en las vistas, como pueden ser:
Menus de navegación, footer, menus laterales, etc. <head>
<meta charset="UTF-8">
<body>
resources/views/
<ul>
<li><a href="/">Home</a></li>
<li><a href="/nosotros">Nosotros</a></li>
<li><a href="/portafolio">Portafolio</a></li>
<li><a href="/contacto">Contacto</a></li>
</ul>
Una vez creado nuestro archivo, copiamos todo lo que tenemos en la vista
</body>
home y lo pegamos en la nueva vista layout. Quitamos todo el contenido, lo
</html>
dejamos como un archivo html con lo básico.
Views: Utilizando una
plantilla blade
Para poder utilizar la plantilla que creamos anteriormente (layout), debemos Obviamente, cada vista tendrá un contenido diferente. Entonces, necesitamos
realizar los siguientes pasos: que el contenido de nuestras vistas se agregue dinamicamente. Es decir: La
misma plantilla con diferente contenido.
resources/views/home.blade.php
@extends('layout') @yield( ‘ ‘ ) resources/views/layout.blade.php
@content( ‘ ‘ ) resources/views/home.blade.php
Entonces, en resumen:
Yield va en el layout y content va en nuestra vista, en este caso home.
Ambos parametro requeridos deben ser iguales.
Views: contenido
dinámico plantillas
blade
En nuestro archivo Layout creamos nuestra directiva @yield(‘ ‘) Creamos el @section(‘ ‘) en nuestra vista home. nosotros.blade.php
home.blade.php @extends('layout')
resources/views/layout.blade.php
<!DOCTYPE html> @extends('layout')
@section('contenido')
<html lang="en">
<h1>Este es Nosotros</h1>
<head> @section('contenido')
@endsection
<meta charset="UTF-8"> <h1>Este es el Home</h1>
scale=1.0">
<body> @section('contenido')
@section nos indica que todo el conteido que tenga dentro, será único para la
<ul> <h1>Este es el Portafolio</h1>
vista home, que seguirá compartiendo el menu de navegación con el resto de
<li><a href="/">Home</a></li> @endsection
vistas donde lo asignemos.
<li><a href="/nosotros">Nosotros</a></li>
@yield('contenido')
Duplicar contenido de home @extends('layout')
</body>
</html> Entonces, ya que tenemos agregado nuestro layout y contenido dinámico a @section('contenido')
nuestra vista home, procedemos a crearlo dentro de las otras 3 vistas que <h1>Este es el Contacto</h1>
creamos anteriormente (NOSOTROS, PORTAFOLIO Y CONTACTO) Solo @endsection
Directiva @yield
modificaremos el interior de nuestro section poniendo el nombre de la vista en
la cual trabajamos. quedando de la siguiente manera:
Views: Agregando el
título de la vista desde
nuestra plantilla
Agregamos un nuevo @yield dentro del tag <title> de nuestra plantilla, a este
@yield lo he llamado page_title para poder identificarlo
resources/views/layout.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
scale=1.0">
<title>@yield('page_title')</title>
</head>
Las estructuras de control son sentencias que permiten controlar cómo el <p>No existen post.</p>
código fluye en nuestro script basándose en ciertos factores. @endforelse
Por ejemplo, cuando queremos realizar una acción sólo si cierta variable está
definida, o cuando queremos mostrar un array de datos a través de un loop.
Las estructuras de control son mayoritariamente condicionales (if, switch, etc)
o loops (for, foreach, etc). Dentro de los bucles, estará disponible una variable especial $loop , que
Blade proporciona una sintaxis conveniente para estructuras de control PHP contiene información sobre el estado del bucle:
'Si' declaraciones 'A menos que' declaraciones $loop->iteration La iteración del bucle actual (comienza en 1).
<p>{{ $i }} Es largo.</p> $loop->first El número total de elementos en la matriz que se está iterando.
@unless ($user->hasName())
@elseif ($i == 10) $loop->last Si esta es la primera iteración a través del bucle.
<p>El usuario no tiene
<p>{{ $i }} Es 10.</p>
nombre.</p> $loop->depth El nivel de anidamiento del bucle actual.
@else
@endunless $loop->parent Cuando se encuentra en un bucle anidado, la variable de bucle principal.
<p>{{ $i }} Es pequeño.</p>
@endif
Ejemplo:
BUCLES @foreach ($users as $user)
@if ($loop->parent->first)
@endif
@while (true) @foreach ($users as $id => $name)
@endforeach
<p>Soy un loop por siempre <p>Usuario: {{ $name }} Id:
@endforeach
.</p> {{ $id }}.</p>
@endwhile @endforeach
Controllers: Estructuras 'Forelse' Loop
de control @forelse($posts as $post)
@empty
routes/web.php
$portafolio = [
['title' => 'proyecto 1'], Dentro de los bucles, estará disponible una variable especial $loop , que
['title' => 'proyecto 2'], contiene información sobre el estado del bucle:
['title' => 'proyecto 3'],
]; Propiedad Descripción
$loop->index El índice de la iteración del bucle actual (comienza en 0).
Ahora vamos a pasar nuestra variable portafolio a nuestra vista portafolio. $loop->iteration La iteración del bucle actual (comienza en 1).
Pasamos la variable mediante el $loop->parent Cuando se encuentra en un bucle anidado, la variable de bucle principal.
método compactasignandole
como valor, el nombre de
nuestra variable
Ejemplo:
@foreach ($users as $user)
@if ($loop->parent->first)
@endif
@endforeach
@endforeach