X

La nouvelle variable $loop dans Laravel 5.3


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, @foreachet 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, renverrait 2
  • count: le nombre d’éléments dans la boucle
  • first: booléen ; s’il s’agit du premier élément de la boucle
  • last: booléen ; s’il s’agit du dernier élément de la boucle
  • depth: entier ; combien de “niveaux” de profondeur cette boucle est ; Retour 1 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 retourne null

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!