index - laravel blade variables
Laravel-¿Diferencia entre @yield y @section? (5)
Básicamente el yield(''content'')
es un marcador. Por ejemplo, en la etiqueta, si coloca un yield(''content'')
, el dicho de esta sección tiene el nombre del contenido y, por cierto, puede nombrar dentro del paréntesis todo lo que desee. no tiene que ser contenido Puede ser rendimiento (''dentro''). o cualquier cosa que quieras.
Y luego, en la página secundaria donde desea importar html de su página de diseño, simplemente diga la sección (''name of the section'')
.
por ejemplo, si ha marcado su encabezado en la página de diseño como rendimiento (''my_head_band'')
<- o cualquier otra cosa que desee, entonces en su página secundaria solo dice @section(''my_head_band'')
.
Esto importaría el encabezado de la página de diseño en su página secundaria. viceversa con la sección de su cuerpo, que en este caso se denominó contenido.
Espero que esto ayude.
Desde los documentos de Laravel , puede incluir "secciones" dentro de los diseños utilizando dos métodos:
<html>
<body>
@section(''sidebar'')
This is the master sidebar.
@show
<div class="container">
@yield(''content'')
</div>
</body>
</html>
Dado que @yield
también puede pasar algo de contenido predeterminado utilizando @yield(''section'', ''Default Content'')
, ¿es @yield
solo una abreviatura para una @section
que no usa @parent
?
@section
<!-- Nothing here -->
@show
¿Qué otras diferencias hay?
Esta línea elimina la confusión: "Tenga en cuenta que las vistas que extienden un diseño Blade simplemente anulan las secciones del diseño. El contenido del diseño se puede incluir en una vista secundaria usando la directiva @parent
en una sección".
Por lo tanto, si ya tiene una @section
definida en el diseño maestro, se anulará a menos que especifique @parent
dentro de la @parent
del diseño @section
.
Pero para @yield
, siempre obtiene la sección del diseño secundario. Eso significa que siempre anula la parte @yield
, incluso si tiene un valor predeterminado definido como @yield(''section'', ''Default Content'')
.
Espero que eso aclare tu confusión. Déjame saber si tienes más preguntas. Gracias
Solo para agregar algo pequeño, @yield
básicamente define una sección para ser inyectada overwriting
los datos y también funciona si nuestra vista @extends
la vista principal.
Ahora, cuando overwrite
, reemplazamos una implementación completamente con una nueva implementación, como una empresa puede decidir cambiar / sobrescribir toda su tecnología si se da cuenta de que algo salió mal.
No debe confundirse con override
La respuesta más corta:
Utilice @yield
en master si desea sobrescribir completamente los datos secundarios en el diseño maestro.
Use @section
en master si desea usar datos maestros y secundarios juntos en child con @parent
(O sobrescriba datos secundarios en el diseño maestro como @yield
)
Respuesta corta : utilice siempre @yield
menos que desee hacer algo más complicado y luego proporcionar una string
predeterminada.
Respuesta larga : tanto @yield como @section .. @show se suelen sobrescribir de forma opcional cada vez que amplíe la plantilla blade. Todo lo que puedes hacer con @yield también se puede hacer con @section .. @show pero no al revés. Esto es lo que hacen:
@yield (''main'')
- Puede ser reemplazado por @section (''main'') .. @endsection
- Puede proporcionarse con una cadena por defecto pero no HTML! La cadena predeterminada se mostrará en la sub-hoja-plantilla cuando no se proporcione @section (''main'') .. @endsection .
@section (''main'') .. @show
- Puede ser reemplazado por @section (''main'') .. @endsection
- Se puede proporcionar con un código HTML predeterminado. El código HTML predeterminado se mostrará en la sub-hoja-plantilla cuando no se proporcione @section (''main'') .
- Puede reemplazarse por @section (''main'') @ parent .. @endsection y además muestra el código HTML predeterminado.
Aquí algunos ejemplos: test.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<h1>This is a test</h1>
@yield(''mainA'')
@yield(''mainB'', ''This is the alternative 1'')
@yield(''mainC'', ''<p>This is the alternative 2</p>'')
@yield(''mainD'', ''This is the alternative 3'')
@section(''testA'')
@show
@section(''testB'')
This is the alternative 4
@show
@section(''testC'')
<p>This is the alternative 5</p>
@show
@section(''testD'')
<p>This is the alternative 6</p>
@show
</body>
</html>
Aquí hay otro archivo llamado testA.blade.php
que extiende el otro archivo con hoja:
@extends(''test'')
@section(''mainD'')
<div>
<p>First replacement!</p>
<hr>
</div>
@endsection
@section(''testC'')
<div>
<p>Second replacement!</p>
<hr>
</div>
@endsection
@section(''testD'')
@parent
<div>
<p>Additional content</p>
<hr>
</div>
@endsection
Y ese es el resultado: