À partir de Laravel docs , vous pouvez inclure des "sections" dans les mises en page de deux manières:
<html>
<body>
@section('sidebar')
This is the master sidebar.
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
Puisque @yield
peut également transmettre du contenu par défaut à l'aide de @yield('section', 'Default Content')
, @yield
est-il simplement un raccourci pour un @section
qui n'utilise pas @parent
?
@section
<!-- Nothing here -->
@show
Quelles sont les autres différences?
Cette ligne supprime la confusion: "Notez que les vues qui étendent une présentation de lame remplacent simplement des sections de la présentation. Le contenu de la présentation peut être inclus dans une vue enfant en utilisant la directive @parent
dans une section".
Ainsi, si vous avez déjà défini un @section
dans la présentation principale, il sera remplacé à moins que vous ne spécifiiez @parent
à l'intérieur du @section
de la présentation enfant.
Mais pour @yield
, il obtient toujours la section de la disposition enfant. Cela signifie qu'il remplace toujours la partie @yield
, même si sa valeur par défaut est @yield('section', 'Default Content')
.
J'espère que cela efface votre confusion. Dites moi si vous avez d'autres questions. Merci
Réponse courte _: Utilisez toujours @yield
à moins que vous ne vouliez faire quelque chose de plus compliqué que de fournir une valeur par défaut string
.
Réponse longue: Les deux @ rendement et @section .. @show sont utilisés pour être éventuellement remplacés chaque fois que vous étendez le modèle de lame. Tout ce que vous pouvez faire avec @ rendement peut également être fait avec @section .. @show, mais pas l'inverse. Voici ce qu'ils font:
@yield ('main')
@section ('main') .. @show
Voici quelques exemples: 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>
voici un autre fichier appelé testA.blade.php
qui étend l'autre fichier à lames:
@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
Et c'est le résultat:
yield('content')
est un marqueur. Par exemple, dans la balise si vous mettez une yield('content')
, vous dites que cette section a le nom du contenu et vous pouvez nommer ce que vous voulez à l'intérieur de la parenthèse. ça n'a pas besoin d'être content. il peut être céder («à l'intérieur»). ou tout ce que vous voulez.
Ensuite, dans la page enfant où vous souhaitez importer du code HTML à partir de votre page de présentation, vous dites simplement section('name of the section')
.
Par exemple, si vous avez marqué votre en-tête dans votre page de mise en page comme return('my_head_band')
<- ou tout autre élément de votre choix, dans votre page enfant, vous dites simplement @section('my_head_band')
.
Cela importerait l'en-tête de la page de mise en page dans votre page enfant. vice versa avec votre section de corps qui dans ce cas a été nommé en tant que contenu.
J'espère que cela t'aides.
Pour ajouter quelque chose de petit, @yield
définit en gros une section à injecter par les données overwriting
et fonctionne également si notre vue @extends
est la vue parent.
Désormais, lorsque nous overwrite
, nous remplaçons complètement une implémentation par une nouvelle implémentation, comme si une entreprise pouvait décider de modifier/écraser toute sa technologie si elle réalisait que quelque chose ne va pas.
Il ne faut pas confondre avec override
La réponse la plus courte:
Utilisez @yield
dans le masque si vous voulez écraser complètement les données enfants de la mise en page principale.
Utilisez @section
dans le masque si vous souhaitez utiliser les données maître et enfants ensemble sur l'enfant avec @parent
(ou écrasez les données enfant sur la présentation principale comme @yield
)