Jetons un coup d’œil à une autre nouvelle fonctionnalité qui arrive dans Laravel 5.3.
Que sont les directives Blade ?
Le langage de modèles Blade de Laravel fournit quelque chose appelé “directives”, qui sont des balises personnalisées – souvent des structures de contrôle – qui sont précédées de @
. Si vous avez déjà écrit des modèles avec Blade, vous connaissez probablement @if
, @foreach
et ainsi de suite.
En général, ces directives de structure de contrôle émulent simplement leurs analogues PHP ; Par exemple, @if(condition)
est exactement le même que <?php if (condition):
.
Présentation de la $loop
variable
En 5.3, le @foreach
directive devient un peu une superpuissance, sous la forme d’un nouveau $loop
variable qui sera disponible à l’intérieur de chaque @foreach
boucle.
Le $loop
la variable est une stdClass
objet qui fournit des méta-informations sur la boucle dans laquelle vous vous trouvez actuellement. Jetez un oeil aux propriétés qu’il expose:
index
: l’index de base 0 de l’élément courant dans la boucle ;0
signifierait “premier élément”iteration
: l’index de base 1 de l’élément courant dans la boucle ;1
signifierait “premier élément”remaining
: combien d’éléments restent dans la boucle ; si l’élément actuel est le premier de trois, renverrait2
count
: le nombre d’éléments dans la bouclefirst
: booléen ; s’il s’agit du premier élément de la bouclelast
: booléen ; s’il s’agit du dernier élément de la boucledepth
: entier ; combien de “niveaux” de profondeur cette boucle est ; Retour1
pour une boucle,2
pour une boucle dans une boucle, etc.parent
: si cette boucle est dans une autre@foreach
boucle, renvoie une référence à la$loop
variable pour l’élément de boucle parent ; sinon retournenull
La plupart de ces éléments sont assez explicites ; cela signifie que vous pouvez faire quelque chose comme ceci:
<ul>
@foreach ($pages as $page)
<li>{{ $page->title }} ({{ $loop->iteration }} / {{ $loop->count }})</li>
@endforeach
</ul>
Mais vous obtenez également une référence au parent $loop
variables lorsque vous avez une boucle dans une boucle. Vous pouvez utiliser depth
pour déterminer s’il s’agit d’une boucle dans une boucle, et parent
saisir le $loop
variable de son parent. Cela ouvre des options de modèles comme celle-ci :
<ul>
@foreach ($pages as $page)
<li>{{ $loop->iteration }}: {{ $page->title }}
@if ($page->hasChildren())
<ul>
@foreach ($page->children() as $child)
<li>{{ $loop->parent->iteration }}.{{ $loop->iteration }}:
{{ $child->title }}</li>
@endforeach
</ul>
@endif
</li>
@endforeach
</ul>
C’est ça!