php artisan make:view home
Una vista puede ser un fichero tan simple como:
Hola, {{ $nombre }}
===== Usando vistas en los controladores =====
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller {
public function __invoke() {
return view('home'); // 'view' es un "helper" de Laravel para llamar a una vista
}
}
El fichero ''routes/web.php'' lo tenemos así:
Una práctica recomendable, por convención, es nombrar a las vistas como el método del controlador que la llama. Por ejemplo, supongamos que tenemos el siguiente controlador:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index() {
return "Aquí irán los posts";
}
public function create() {
return "Aquí se mostrará un formulario para crear un post";
}
public function show($post) {
return "Aquí se mostrará el post {$post}";
}
}
Entonces crearíamos las vistas ''index.blade.php'', ''create.blade.php'', ''show.blade.php'' y ''show.blade.php''. Por organización, queremos que las cree en una carpeta llamada ''posts'' ya que todas tienen que ver con lo mismo:
php artisan make:view posts.index
php artisan make:view posts.create
php artisan make:view posts.show
Ahora haría modificaciones en el controlador para llamar a las vistas creadas:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index() {
return view("posts.index");
}
public function create() {
return view("posts.create");
}
public function show($post) {
// Para pasarle variables a un vista, la añadimos a un array
// como segundo argumento del "helper" 'view'
return view("posts.show", [
'post' => $post
]);
}
}
La vista ''show.blade.php'' es un poco especial porque muestra información variable:
Aquí se mostrará el post {{ $post }}
Si no usásemos las etiquetas de Blade, mostraríamos el contenido de esa variable como hacemos en PHP:
Aquí se mostrará el post
Para pasarle argumentos a una vista desde un controlador, también podemos usar la función ''[[https://www.php.net/manual/es/function.compact.php|compact()]]'':
// ... código
public function show($post) {
return view("posts.show", compact('post'));
La función ''compact()'' genera un array con la clave llamada como el argumento y el dato también, pero con el símbolo de dólar, que indica que se trata de una variable. Es decir, ''compact('post')'' creará el siguiente array:
['post' => $post];
===== Blade: motor de plantillas =====
[[https://laravel.com/docs/11.x/blade|Blade]] es el motor de plantillas que incluye Laravel
==== Variables ====
Para mostrar el contenido de una variable en Blade:
{{ $variable }}
Comentar para que no las procese ni las muestre:
{{-- $variable --}}
Si queremos que aparezca el texto tal cual (llaves incluidas), es decir, que Blade no evalúe nada:
@{{ $variable }}
Esto es útil si estamos trabajando con un framework para el frontend como Vuejs, React o Angular ya que también utilizan la sintaxis de las dobles llaves para las variables.
==== Estructuras de control ====
Por ejemplo, si tenemos en nuestro controlador:
public function index()
{
$products = Product::all();
return view("products.index")->with([
"products" => $products,
]);
}
En la vista (''resources/views/products.blade.php''):
Product
List of Products
@if (empty($products))
This list of products is empty
@else
ID
Title
Description
Price
Stock
Status
@foreach ($products as $product)
{{ $product->id }}
{{ $product->title }}
{{ $product->description }}
{{ $product->price }}
{{ $product->stock }}
{{ $product->status }}
@endforeach
@endif
Para el caso de comprobar vacíos, existe otra estructura dedicada::
List of Products
@empty ($products)
This list of products is empty
@else
...
@endempty
==== Componentes ====
Cuando queramos definir código que se repite en varios puntos de nuestro proyecto, Blade nos permite la creación de componentes.
Para organizarlo, creamos una carpeta ''resources/views/components'' y creamos un fichero con un nombre significativo. Por ejemplo, si queremos crear un componente para las alertas, creamos un fichero ''alert.blade.php'':
Info alert! Change a few things up and try submitting again.