switch plantillas comentarios code auth php laravel blade laravel-5.4 laravel-blade

php - plantillas - switch laravel



Laravel Blade-¿Ventaja de @ slot/@ component vs @include? (3)

Como dice la documentation :

Los componentes y las ranuras proporcionan beneficios similares a las secciones y diseños; sin embargo, algunos pueden encontrar el modelo mental de componentes y ranuras más fácil de entender .

Laravel 5.4 Blade introdujo el concepto de componentes y ranuras, pero no puedo ver lo que agregan sobre el tradicional @include. Como entiendo, con componentes / ranuras, usted hace:

En la plantilla component-tpl.blade.php:

<div class=''container''> <h1>{{$slot1}}</h1> <h2>{{$slot2}}</h2> </div>

Usando ranuras en la plantilla de página, haces:

@component(''component-tpl'') @slot(''slot1'') The content of Slot 1 @endslot @slot(''slot2'') The content of Slot 2 @endslot @endcomponent

¿Qué funcionalidad proporciona eso sobre el anterior?

@include(''component-tpl'',[''slot1''=>''The content of Slot 1'', ''slot2''=>"The content of Slot 2"])

¿Está utilizando exactamente la misma plantilla Blade ''component-tpl.blade.php''?

¿Qué me estoy perdiendo? Gracias por cualquier información.

Chris


Como se indicó, no hay diferencia funcional, pero el uso cuidadoso de ambos puede proporcionarle archivos blade más limpios.

Si una ranura puede contener HTML, el uso de un componente le dará una sintaxis más clara en sus archivos blade.

@component(''test'') <strong>This text has html</strong> @endcomponent

versus

@include(''test'', [''slot'' => ''<strong>This text has HTML</strong>''])

Igualmente, si un componente no tiene ranuras, se puede preferir una inclusión:

@include(''test'')

versus

@component(''test'') @endcomponent


Creo que he encontrado otra diferencia crucial. Por ejemplo, de la documentación para 5.4:

La directiva @include de Blade le permite incluir una vista Blade desde otra vista. Todas las variables que están disponibles para la vista principal estarán disponibles para la vista incluida:

Por lo que sé, los componentes tienen un alcance diferente al de una vista que los contiene, por lo que las variables disponibles para la vista principal no están disponibles dentro del componente. Necesitas pasar una variable a un componente como este:

@component(''alert'', [''foo'' => ''bar'']) @endcomponent

Esta discusión está relacionada con este problema: Use variables dentro de Markila Mailables