informatica:programacion:php:frameworks:laravel:uso_de_vistas
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:programacion:php:frameworks:laravel:uso_de_vistas [2025/02/12 16:00] – tempwin | informatica:programacion:php:frameworks:laravel:uso_de_vistas [2025/03/03 14:24] (actual) – [Crear plantillas para las vistas] tempwin | ||
|---|---|---|---|
| Línea 135: | Línea 135: | ||
| <code php> | <code php> | ||
| [' | [' | ||
| + | </ | ||
| + | |||
| + | ===== Blade: motor de plantillas ===== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ==== Variables ==== | ||
| + | |||
| + | Para mostrar el contenido de una variable en Blade: | ||
| + | |||
| + | <code hml5> | ||
| + | {{ $variable }} | ||
| + | </ | ||
| + | |||
| + | Comentar para que no las procese ni las muestre: | ||
| + | |||
| + | <code hml5> | ||
| + | {{-- $variable --}} | ||
| + | </ | ||
| + | |||
| + | Si queremos que aparezca el texto tal cual (llaves incluidas), es decir, que Blade no evalúe nada: | ||
| + | |||
| + | <code hml5> | ||
| + | @{{ $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: | ||
| + | |||
| + | <code php> | ||
| + | public function index() | ||
| + | { | ||
| + | $products = Product:: | ||
| + | | ||
| + | return view(" | ||
| + | " | ||
| + | ]); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | En la vista ('' | ||
| + | |||
| + | <code html5> | ||
| + | < | ||
| + | <html lang=" | ||
| + | < | ||
| + | <meta charset=" | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | < | ||
| + | | ||
| + | @if (empty($products)) | ||
| + | <div class=" | ||
| + | This list of products is empty | ||
| + | </ | ||
| + | @else | ||
| + | <div class=" | ||
| + | <table class=" | ||
| + | <thead class=" | ||
| + | <tr> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | </ | ||
| + | < | ||
| + | @foreach ($products as $product) | ||
| + | <tr> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | @endforeach | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | @endif | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Para el caso de comprobar vacíos, existe otra estructura dedicada:: | ||
| + | |||
| + | <code html5> | ||
| + | < | ||
| + | | ||
| + | @empty ($products) | ||
| + | <div class=" | ||
| + | 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, | ||
| + | |||
| + | <code html> | ||
| + | <div class=" | ||
| + | <span class=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | A partir de este momento, cada vez que queramos llamar a ese componente, utilizaríamos la etiqueta ''< | ||
| + | |||
| + | <code html> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <script src=" | ||
| + | </ | ||
| + | < | ||
| + | <!-- Breathing in, I calm body and mind. Breathing out, I smile. - Thich Nhat Hanh --> | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Para tener un contenido variable en un componente, tenemos que crear una variable en el lugar que va a cambiar: | ||
| + | |||
| + | <code html> | ||
| + | <div class=" | ||
| + | <span class=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Y le pasaríamos el contenido en la etiqueta de la vista donde la usamos: | ||
| + | |||
| + | <code html> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <script src=" | ||
| + | </ | ||
| + | < | ||
| + | <!-- Breathing in, I calm body and mind. Breathing out, I smile. - Thich Nhat Hanh --> | ||
| + | < | ||
| + | < | ||
| + | Contenido de la alerta | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Cuando queremos usar más de una variable, tenemos que utilizar la etiqueta ''< | ||
| + | |||
| + | <code html> | ||
| + | <div class=" | ||
| + | <span class=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Y en la vista: | ||
| + | |||
| + | <code html> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <script src=" | ||
| + | </ | ||
| + | < | ||
| + | <!-- Breathing in, I calm body and mind. Breathing out, I smile. - Thich Nhat Hanh --> | ||
| + | < | ||
| + | < | ||
| + | <x-slot name=" | ||
| + | Título de la alerta | ||
| + | </ | ||
| + | Contenido de la alerta | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | También podríamos añadir atributos: | ||
| + | |||
| + | <code html> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <script src=" | ||
| + | </ | ||
| + | < | ||
| + | <!-- Breathing in, I calm body and mind. Breathing out, I smile. - Thich Nhat Hanh --> | ||
| + | < | ||
| + | <x-alert type=" | ||
| + | <x-slot name=" | ||
| + | Título de la alerta | ||
| + | </ | ||
| + | Contenido de la alerta | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | En el componente ('' | ||
| + | |||
| + | <code html> | ||
| + | @props ([' | ||
| + | |||
| + | @php | ||
| + | switch ($type) { | ||
| + | case ' | ||
| + | $class = " | ||
| + | break; | ||
| + | case ' | ||
| + | $class = " | ||
| + | break; | ||
| + | case ' | ||
| + | $class = " | ||
| + | break; | ||
| + | case ' | ||
| + | $class = " | ||
| + | break; | ||
| + | case ' | ||
| + | $class = " | ||
| + | break; | ||
| + | default: | ||
| + | break; | ||
| + | } | ||
| + | @endphp | ||
| + | <div class=" | ||
| + | <span class=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Componentes de clase ==== | ||
| + | |||
| + | Con los componentes de clase podremos separar la lógica de la vista. En el apartado anterior, en '' | ||
| + | |||
| + | < | ||
| + | php artisan make: | ||
| + | </ | ||
| + | |||
| + | Se creará '' | ||
| + | |||
| + | Ahora moveremos la lógica de '' | ||
| + | |||
| + | <code php> | ||
| + | |||
| + | </ | ||
| + | |||
| + | Y en la vista ('' | ||
| + | |||
| + | <code php> | ||
| + | <div {{ $attributes-> | ||
| + | <span class=" | ||
| + | </ | ||
| + | |||
| + | En la vista '' | ||
| + | |||
| + | <code php> | ||
| + | // ... | ||
| + | < | ||
| + | <x-slot name=" | ||
| + | Título de la alerta | ||
| + | </ | ||
| + | | ||
| + | Contenido de la alerta | ||
| + | </ | ||
| + | </ | ||
| + | ===== Crear plantillas para las vistas ===== | ||
| + | |||
| + | Para cuando tengamos componentes que se repitan. | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Parece ser que lo habitual no es hacer esto para la creación de plantillas sino usar componentes. | ||
| + | </ | ||
| + | |||
| + | Creamos, por ejemplo, '' | ||
| + | |||
| + | <code html5> | ||
| + | < | ||
| + | <html lang=" | ||
| + | < | ||
| + | <meta charset=" | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | @yield(' | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Con '' | ||
| + | |||
| + | Las vistas que quieran utilizar esta plantilla tendrían que... | ||
| + | |||
| + | <code html5> | ||
| + | @extends(" | ||
| + | |||
| + | @section(" | ||
| + | |||
| + | < | ||
| + | | ||
| + | @if (empty($products)) | ||
| + | <div class=" | ||
| + | This list of products is empty | ||
| + | </ | ||
| + | @else | ||
| + | <div class=" | ||
| + | <table class=" | ||
| + | <thead class=" | ||
| + | <tr> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | </ | ||
| + | < | ||
| + | @foreach ($products as $product) | ||
| + | <tr> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | @endforeach | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | @endif | ||
| + | |||
| + | @endsection | ||
| + | </ | ||
| + | |||
| + | ===== Crear componentes para las vistas ===== | ||
| + | |||
| + | Con el propósito de centralizar información, | ||
| + | |||
| + | Creamos un fichero en '' | ||
| + | |||
| + | <code html5> | ||
| + | < | ||
| + | <p>{{ $product-> | ||
| + | <p>{{ $product-> | ||
| + | <p>{{ $product-> | ||
| + | <p>{{ $product-> | ||
| + | </ | ||
| + | |||
| + | Para utilizar este componente en una plantilla de blade: | ||
| + | |||
| + | <code html5> | ||
| + | <div class=" | ||
| + | @foreach ($products as $product) | ||
| + | <div class=" | ||
| + | @include(" | ||
| + | </ | ||
| + | @endforeach | ||
| + | </ | ||
| </ | </ | ||
| ===== Enviando y mostrando información en vistas ===== | ===== Enviando y mostrando información en vistas ===== | ||
informatica/programacion/php/frameworks/laravel/uso_de_vistas.1739372411.txt.gz · Última modificación: por tempwin
