laravel 5.6 plantillas blade

son archivos con extension *.blade.php

si ya tienes un archivo php y lo renombras no hace falta modificar la sintaxis del contenido.

la sintaxis blade te simplifica el codigo, veamos:

el parametro enviado es: <?php echo $parametro?>

quedaria asi:

el parametro enviado es: {{parametro }}

los archivos blade se compilan y generan un archivo php que se almacena en
storage/frmawork/views
siempre que no se hagan cambios al archivo original, el navegador llamara al archivo compilado.

si examinamos el archivo compilado veremos que la linea con sintaxis blade se tradujo a;

esta es la home, y el parametro enviado es: <?php echo e($parametro); ?>
la function e es un helper de laravel que pasa la variable por htmlentities
es decir imprime el contenido tal como viene y no lo interpreta.
por ejemplo si el parametro contiene codigo html o javascript este se mostrar tal cual y no se
"ejecutara". esto se hace para evitar "inyeccion de codigo malisioso"(xss: cross site scripting)

ejemplo:

Route::get('home/{parametro?}', ['as'=>'home', function($parametro=''){
$script= '<h2>esto es codigo html</h2>';
return view('home',compact('parametro','script'));

}]);

si la vista tiene esto es un script: {{$script}}

se mostrara esto es un script: <h2>esto es codigo html</h2>

si nuestra intencion es que se ejecute el codigo html debemos poner

esto es un script: { !!$script!! }

se imprimira:

esto es un script:

esto es codigo html


tambien se pueden imprimir listado de datos

$lista= ['uno','dos','tres','cuatro'];
return view('home',compact('parametro','script','lista'));

en la vista

@foreach ($lista as $item)
    <p> {{ $item }}</p>
@endforeach


@forelse ($lista as $item)
    <li>{{ $item }}</li>
@empty
    <p>lista vacia</p>
@endforelse

como crear una plantilla base?

crearemos uno llamado p.e layout.blade.php

<!DOCTYPE html>
<html>
<head>
<title>mi sitio</title>
</head>
<body>
   <header>
<nav>
<a href="{{ route('solo-letras','abcde') }}">solo letras</a>
<a href="{{ route('home','israel') }}">home</a>
</nav>
   </header>

   @yield('contenido')

   <footer>
    Copyright {{ date('Y')}}
   </footer>
</body>
</html>

y ahora una vista que extienda de esa plantilla y que solo defina el contenido en la seccion definida.

@extends('layout')


@section('contenido')

<h1>aqui va el contenido de la pagina</h1>

@stop

No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable