Sunteți pe pagina 1din 16

Manual inicio laravel

Francisco kataldo
www.kataldo.com
Pasos para comenzar a
trabajar con laravel

1 Instalar Mamp o Ammps 6 Crear proyecto laravel


composer create-project --prefer-dist
laravel/laravel NombreDelProyecto
2 Instalar homebrew
/usr/bin/ruby -e "$(curl -fsSL https://
raw.githubusercontent.com/Homebrew/ 7 Levantar proyecto laravel
install/master/install)" php artisan serve

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');"

4 Mover archivo phar


mv composer.phar /usr/local/bin/composer

De no existir la ruta anterior, la creamos


sudo mkdir /usr/local/bin

5 Mover directorio a phat


export PATH="$PATH:$HOME/ .composer/
vendor/bin"
Definición de
directorios de carpetas

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.

Bootstrap / app.php Storage / App


Contiene las instrucciones que arrancan el guarda archivos generados por la aplicación
framework app-> public: guarda archivos publicos como
imagenes de usuarios
Config
Contiene la configuración de la aplicación como: Logs
nombre de la aplicación, definir si estamos en contiene información de errores

producción o en desarrollo, mostrar errores


sensibles, configuración de conexión a base de
Vendor
Contiene dependencias de nuestra aplicación.
datos, etc.
.Env Esta ruta por lo general no se toca.
Podemos modificar los datos de configuración,
los mismos de la carpeta config, pero de manera
segura. y es acá donde los debemos hacer.

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.)

Existen cuatro tipos de rutas en laravel

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

En este tipo de rutas, debemos ingresar dos parámetros. Ejemplo:


Tenemos una ruta “saludo” donde queremos saludar al usuario por parámetro.
Para eso agregamos el parametro {nombre} después de la ruta y a la función que antes era anónima
1 La URL: ahora le damos como parámetro la variable nombre y este mismo lo retornamos en el return.
Es la url que utilizará el navegador para Como resultado nos da “saludo nombre”. En este caso la ruta espera obligatoriamente que despues de
conectarse. (en este caso la raíz ‘/‘ ) saludo/ le demos un nombre por url, de no ser así, nos dará error 404

2 Función anónima:
routes/web.php

Debemos pasarle una función anónima que será Route::get('saludo/{nombre}', function ($nombre) {

encargada de mostrar el contenido. return "Saludo " . $nombre;

});

Url Función anónima

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

Si quisieramos mostrar un mensaje al escribir en la barra del Curso laravel Kataldo.com


navegador nuestraweb.com/contacto usaríamos el
siguiente código: 127.0.0.1:8000/saludo/Francisco Parámetro opcional
routes/web.php
routes/web.php Dato por default del parametro
Route::get('saludo/{nombre?}', function ($nombre = “Invitado”) { nombre. Actuará sólo si no
agregamos un parámetro en la url
Route::get('contacto', function () { return "Saludo " . $nombre;

return "hola desde la página de contacto"; });

});

Signo de interrogación para


indicar que puede o no haber
un parámetro
Routes: Rutas con
nombre
Rutas con nombre hacen que la referencia a rutas cuando se generan Referenciamos al nombre de la ruta
redirecciones o URLs sea mucho más conveniente.
echo "<a href='" . route('contactos') . "'>Contacto 2 </a><br>";
Supongamos que tenemos una ruta llamada contacto
y además tenemos esa ruta llamada desde 100 lugares distintos dentro de toda
nuestra aplicación. Si en algún punto alguien nos pidiera que cambiemos el Método route
nombre de la ruta de contacto a contactanos, tendríamos que cambiar el route(‘nombreDeLaRuta’)
nombre de la ruta, y todos los otros 100 lugares donde está ruta es referenciada.
En casos como estos podemos usar rutas con nombre y así llamar al nombre de
la ruta y no a su url

Quedando de la siguiente manera:

1 Ruta contacto: routes/web.php


Tenemos nuestra ruta para contacto, la cual retorna un Route::get('/', function () {
mensaje y además le hemos agregado el método
echo "<a href='" . route('contactos') . "'>Contacto 1 </a><br>";
name ->name(‘nombre’); , el cual nos permite poner
echo "<a href='" . route('contactos') . "'>Contacto 2 </a><br>";
un nombre a la ruta.
echo "<a href='" . route('contactos') . "'>Contacto 3 </a><br>";

echo "<a href='" . route('contactos') . "'>Contacto 4 </a><br>";


Url
echo "<a href='" . route('contactos') . "'>Contacto 5 </a><br>";
routes/web.php
});
Route::get('contacto', function () {

return "hola desde la página de contacto";

})->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:

En vez de referenciar a la ruta:

echo "<a href='/contacto'>Contacto 1 </a><br>";


Routes: Retornando
vistas html
Laravel también nos permite separar la lógica de la presentación (es decir Luego continuamos con nuestro archivo home.blade.php, en el creamos un
cómo vamos a presentar el contenido al usuario) de la lógica de nuestra simple html donde pondremos un H1 con un texto de la siguiente manera
aplicación (por ejemplo cómo vamos a obtener el contenido de la base de
datos, validar datos de la petición, etc.) a través de la capa de vistas resources/views/home.blade.php
<!DOCTYPE html>

<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">

<meta http-equiv="X-UA-Compatible" content="ie=edge">


Dentro de routes/web.php
<title>Home</title>
creamos nuestra ruta hacía la vista.
</head>
En este caso haremos que el home sea nuestra vista, por lo tanto el código es el
<body>
siguiente.
<h1>Este es el home de laravel</h1>
routes/web.php
</body>
Route::get('/', function () { </html>
return view('home');

})->name('home');

Esta es la ruta de nuestra vista, no


debemos poner la ruta completa
Este es el nombre ni la extensión, laravel reconoce
de nuestra vista todo eso por defecto.
Routes: Pasando datos
a las vistas
Supongamos que en la vista home queremos saludar a nuestro usuario,
tenemos diferentes formas de hacerlo.

Usando el método with


routes/web.php
Enviarlo en forma de array
Route::get('/', function () {
routes/web.php
$nombre = "Francisco";
Route::get('/', function () {
return view('home')->with('nombre', $nombre);
$nombre = "Francisco";
})->name('home');
return view('home')->with(['nombre' => $nombre]);

})->name('home');

Creamos la variable Nombre de la variable y su valor

En forma de array [ ]

De esta manera, nuestra variable ya está disponible en la vista.

Segundo parámetro de la función view


<body>
routes/web.php
<h1>Este es el home de laravel</h1> Route::get('/', function () {
Bienvenid@ Bienvenid@ {{ $nombre ?? "invitado" }} $nombre = "Francisco";
</body> return view('home', ['nombre' => $nombre]);
</html> })->name('home');

Variable disponible en la vista

Segundo parámetro

Para pasar variables con php solo, debemos hacer lo siguiente


Si tenemos algunas páginas donde no pasaremos mucha información como lo
Bienvenid@ <?php echo $nombre ?? "invitado" ?> son las páginas de politicas de privacidad, términos y condiciones. Podemos
usar la ruta de la siguiente manera.

routes/web.php
En cambio laravel nos provee de una mejor forma de hacerlo
Route::view('/', 'home')->name('home');

Bienvenid@ {{ $nombre ?? "invitado" }}

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

Podemos integrar elementos que se repiten como por ejemplo, un menu de


navegación. Con laravel tenemos la opción de crear una vez el elemento fijo y
replicarlo en tantas vistas como necesitemos.
Para este ejemplo crearemos un menu de navegación en todas las vistas.

Creando las rutas de las vistas


routes/web.php
Route::view('/', 'home')->name('home');

Route::view('/nosotros', 'nosotros')->name('nosotros');

Route::view('/portafolio', 'portafolio')->name('portafolio');

Route::view('/contacto', 'contacto')->name('contacto');

Creamos las rutas con sus respectivos nombres.

Creando las vistas para las rutas


Dentro de nuestra carpeta de vistas, creamos las siguientes vistas siguiendo el
modelo anterior de las rutas.

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">

<meta name="viewport" content="width=device-width, initial-


Creando nuestro archivo layout scale=1.0">
El nombre del archivo no necesariamente se deberá llamar layout, podemos <meta http-equiv="X-UA-Compatible" content="ie=edge">
usar el que más nos acomode. Entonces, creamos nuestro archivo <title>Document</title>
layout.blade.php dentro de nuestra carpeta Views. </head>

<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.

Añadir la plantilla a nuestras vistas


Para agregar nuestra plantilla dentro de nuestras vistas hacemos uso de la
Definir directiva que envía y otra que recibe el contenido
directiva @extends(‘ ’) la cual nos pide un parametro y este es el nombre de la
dinámicamente
plantilla. En nuestro caso la plantilla es layout.
Para esto definimos dos nuevas directivas:
De esta manera debemos agregar nuestra plantilla de la siguiente manera.
La directiva @yield(‘ ‘) & la directiva @section(‘ ‘)

resources/views/home.blade.php
@extends('layout') @yield( ‘ ‘ ) resources/views/layout.blade.php

Esta directiva es la encaragada de ir a buscar el contenido que será


reemplazado dinamicamente en su lugar. Como parámetro recibe el nombre del
Si recargamos nuestra URL la vista home nos mostrará el menú de navegación.
section creado en nuestra vista.

@content( ‘ ‘ ) resources/views/home.blade.php

Esta directiva es la encargada de almacenar el contenido que se mostrará en el


yield del layout. Como parámetro recibe un nombre, y este nombre es el cual
@yield, desde la plantilla, buscará para llamar el contenido.

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>

<meta name="viewport" content="width=device-width, initial- @endsection

scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge"> portafolio.blade.php


<title>Document</title> @extends nos indica que en la vista home estaremos utiliazando la plantilla
@extends('layout')
</head> layout, la cual contiene nuestro menu de navegación.

<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>

<li><a href="/portafolio">Portafolio</a></li> @endsection nos indica que es el fin de la sección de contenido


<li><a href="/contacto">Contacto</a></li>
contacto.blade.php
</ul>

@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

En este momento el menú de navegación funciona correctamente dentro de


nuestras vistas, pero el titulo de la página que se muestra en la pestaña del
navegador no cambia con ella.
Para solucionar esto, lo hacemos de la siguiente manera:

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">

<meta name="viewport" content="width=device-width, initial-

scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>@yield('page_title')</title>

</head>

@yield para titulo

Ya creamos nuestra directiva en nuestro layout, ahora, dentro de las vistas


debemos pasarle este dato dinámicamente, para esto hacemos lo siguiente:

Creamos nu nuevo @section con dos


home.blade.php
parametros. 1 el nombre del yield de
@extends('layout') nuestra plantilla, 2 el nombre de la la
@section('page_title', 'home') vista actual. en este caso es home.
@section('contenido') Hacemos lo mismo para el resto de
vistas. Este section no es necesario
<h1>Este es el home</h1>
cerrarlo con @endsection
@endsection
Estructuras de
control con blade
Controllers: Estructuras 'Forelse' Loop
de control @forelse($posts as $post)

<p>{{ $post }} Es el contenido


Un script PHP (Laravel) está contruido a partir de sentencias. Una sentencia
puede ser una asignación, una llamada a una función, un loop, una sentencia de los post</p>

condicional o una sentencia vacía. @empty

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:

comunes. Cada una de las estructuras de control comienza con @[structure] y


termina con @[endstructure] .
Propiedad Descripción

CONDICIONALES $loop->index El índice de la iteración del bucle actual (comienza en 0).

'Si' declaraciones 'A menos que' declaraciones $loop->iteration La iteración del bucle actual (comienza en 1).

$loop->count Las iteraciones de bucle restantes.


@if ($i > 10)

<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)

'While' loop Bucle 'Foreach' @foreach ($user->posts as $post)

@if ($loop->parent->first)

Esta es la primera iteración del ciclo padre.

@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)

<p>{{ $post }} Es el contenido


Vamos a suponer que necesitamos pasar un array de información a nuestra vista
portafolio. de los post</p>

@empty

<p>No existen post.</p>


Dentro de nuestra ruta web.php creamos una variable llamada portafolio que
@endforelse
sea un arreglo y que dentro contenga los títulos de los proyectos.

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'],

['title' => 'proyecto 4']

]; 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).

routes/web.php $loop->count Las iteraciones de bucle restantes.

$loop->first El número total de elementos en la matriz que se está iterando.


Route::view('/portafolio', 'portafolio', compact('portafolio'))-

>name('portafolio'); $loop->last Si esta es la primera iteración a través del bucle.

$loop->depth El nivel de anidamiento del bucle actual.

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)

@foreach ($user->posts as $post)

@if ($loop->parent->first)

Esta es la primera iteración del ciclo padre.

@endif

@endforeach

@endforeach

S-ar putea să vă placă și