Recherche…


Introduction

Laravel soutient le moteur de modélisation Blade. Le moteur de modélisation Blade nous permet de créer des modèles maîtres et des modèles de contenu de chargement à partir de modèles principaux, nous pouvons avoir des variables, des boucles et des instructions conditionnelles dans le fichier lame.

Vues: Introduction

Les vues, dans un modèle MVC, contiennent la logique sur la présentation des données à l'utilisateur. Dans une application Web, ils sont généralement utilisés pour générer la sortie HTML renvoyée aux utilisateurs avec chaque réponse. Par défaut, les vues dans Laravel sont stockées dans le répertoire resources/views .

Une vue peut être appelée à l'aide de la fonction d'aide de la view :

view(string $path, array $data = [])

Le premier paramètre de l'assistant est le chemin d'accès à un fichier de vue et le second paramètre est un tableau de données facultatif à transmettre à la vue.

Par conséquent, pour appeler les resources/views/example.php , vous devez utiliser:

view('example'); 

Les fichiers affichés dans des sous-dossiers du répertoire resources/views , tels que resources/views/parts/header/navigation.php , peuvent être appelés à l'aide de la notation par points: view('parts.header.navigation');

Dans un fichier de vue, tel que resources/views/example.php , vous êtes libre d'inclure à la fois HTML et PHP:

<html>
    <head>
        <title>Hello world!</title>
    </head>
    <body>
        <h1>Welcome!</h1>
        <p>Your name is: <?php echo $name; ?></p>
    </body>
</html>

Dans l'exemple précédent (qui n'utilise aucune syntaxe spécifique à Blade), nous générons la variable $name . Pour transmettre cette valeur à notre vue, nous passerions un tableau de valeurs lors de l'appel de l'assistant de vue:

view('example', ['name' => $name]);

ou alternativement, utilisez l'assistant compact() . Dans ce cas, la chaîne transmise à compact () correspond au nom de la variable à transmettre à la vue.

view('example', compact('name'));

CONVENTION D'APPEL POUR VARIABLES DE LAME

Lors de l'envoi de données à l'affichage. Vous pouvez utiliser le underscore pour la variable multi-mots mais avec - laravel donne une erreur.

Comme celui-ci donnera une erreur (remarque hyphen ( - ) dans l' user-address l' user-address

view('example',['user-address' => 'Some Address']);

La manière correcte de le faire sera

view('example', ['user_address' => 'Some Address']);

Structures de contrôle

Blade fournit une syntaxe pratique pour les structures de contrôle PHP courantes.

Chacune des structures de contrôle commence par @[structure] et se termine par @[endstructure] . Notez que dans les balises, nous ne faisons que taper du code HTML normal et inclure des variables avec la syntaxe Blade.

Conditionnels

"Si" déclarations

@if ($i > 10)
    <p>{{ $i }} is large.</p>
@elseif ($i == 10)
    <p>{{ $i }} is ten.</p>
@else
    <p>{{ $i }} is small.</p>
@endif

Déclarations 'à moins'

(Syntaxe courte pour «sinon».)

@unless ($user->hasName())
    <p>A user has no name.</p>
@endunless

Boucles

Boucle 'While'

@while (true)
    <p>I'm looping forever.</p>
@endwhile

Boucle 'Foreach'

@foreach ($users as $id => $name)
    <p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach

Boucle 'Forelse'

(Identique à la boucle 'foreach', mais ajoute une directive @empty spéciale, qui est exécutée lorsque l'expression de tableau itérée est vide, afin d'afficher le contenu par défaut.)

@forelse($posts as $post)
    <p>{{ $post }} is the post content.</p>
@empty
    <p>There are no posts.</p>
@endforelse

Dans les boucles, une variable spéciale $loop sera disponible, contenant des informations sur l'état de la boucle:

Propriété La description
$loop->index L'index de l'itération de la boucle en cours (commence à 0).
$loop->iteration L'itération de la boucle en cours (commence à 1).
$loop->remaining Les itérations de boucle restantes.
$loop->count Le nombre total d'éléments dans le tableau en cours d'itération.
$loop->first Si c'est la première itération dans la boucle.
$loop->last Si c'est la dernière itération à travers la boucle.
$loop->depth Le niveau d'imbrication de la boucle en cours.
$loop->parent Dans une boucle imbriquée, la variable de boucle du parent.

Exemple:

@foreach ($users as $user)
  @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is first iteration of the parent loop.
        @endif
    @endforeach
@endforeach

Depuis Laravel 5.2.22, nous pouvons également utiliser les directives @continue et @break

Propriété La description
@continue Arrêtez l'itération en cours et lancez la suivante.
@break Arrêtez la boucle en cours.

Exemple :

@foreach ($users as $user)
    @continue ($user->id == 2)
        <p>{{ $user->id }} {{ $user->name }}</p>
    @break ($user->id == 4)
@endforeach

Ensuite (en supposant que plus de 5 utilisateurs sont triés par ID et qu'aucun ID ne soit manquant ), la page sera rendue

1 Dave
3 John
4 William

Faire écho aux expressions PHP

Toute expression PHP entre accolades doubles {{ $variable }} sera echo après avoir été exécutée via la fonction e helper . (Les caractères spéciaux html ( < , > , " , ' , & ) sont donc remplacés en toute sécurité pour les entités HTML correspondantes.) (L'expression PHP doit être évaluée en chaîne, sinon une exception sera levée.)

Faire écho à une variable

{{ $variable }}

Faire écho à un élément dans un tableau

{{ $array["key"] }}

Faire écho à une propriété d'objet

{{ $object->property }}

Faire écho au résultat d'un appel de fonction

{{ strtolower($variable) }}

Vérification de l'existence

Normalement, en PHP, vérifier si une variable est définie et l’imprimer

  • Avant PHP 7
<?php echo isset($variable) ? $variable : 'Default'; ?>
  • Après PHP 7 (en utilisant le "Null coalescing operator")
<?php echo $variable ?? 'Default'; ?>

Opérateur de lame or facilite ceci:

{{ $variable or 'Default' }}

Échos bruts

Comme mentionné précédemment, la syntaxe des doubles accolades {{ }} est filtrée via la fonction htmlspecialchars de PHP, pour des htmlspecialchars de sécurité (prévention de l'injection malveillante de HTML dans la vue). Si vous souhaitez contourner ce comportement, par exemple si vous essayez de générer un bloc de contenu HTML résultant d'une expression PHP, utilisez la syntaxe suivante:

{!! $myHtmlString !!}

Notez qu'il est recommandé d'utiliser la syntaxe standard {{ }} pour échapper à vos données, sauf en cas d'absolue nécessité. De plus, lorsque vous faites écho à un contenu non fiable (c.-à-d. Contenu fourni par les utilisateurs de votre site), vous devriez éviter d'utiliser le {!! !!} syntaxe.

Y compris les vues partielles

Avec Blade, vous pouvez également inclure des vues partielles (appelées "partials") directement dans une page comme celle-ci:

@include('includes.info', ['title' => 'Information Station'])

Le code ci-dessus inclura la vue dans "views / includes / info.blade.php". Il passera également dans une variable $title ayant la valeur 'Information Station'.

En général, une page incluse aura accès à toute variable à laquelle la page appelante a accès. Par exemple, si nous avons:

{{$user}} // Outputs 'abc123'
@include('includes.info')

Et 'includes / info.blade.php' a les caractéristiques suivantes:

<p>{{$user}} is the current user.</p>

Ensuite, la page affichera:

abc123
abc123 is the current user.

Inclure chaque

Parfois, vous souhaiterez combiner une instruction include avec une instruction foreach et accéder aux variables depuis la boucle foreach de l'inclusion. Dans ce cas, utilisez la directive @each de Blade:

@each('includes.job', $jobs, 'job')

Le premier paramètre est la page à inclure. Le second paramètre est le tableau à parcourir. Le troisième paramètre est la variable affectée aux éléments du tableau. La déclaration ci-dessus est équivalente à:

@foreach($jobs as $job)
    @include('includes.job', ['job' => $job])
@endforeach

Vous pouvez également transmettre un quatrième argument facultatif à la directive @each pour spécifier la vue à afficher lorsque le tableau est vide.

@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')

Héritage

Une mise en page est un fichier de vue, étendu par d'autres vues qui injectent des blocs de code dans leur parent. Par exemple:

parent.blade.php:

<html>
    <head>
        <style type='text/css'>
        @yield('styling')
        </style>
    </head>
    <body>
        <div class='main'>
        @yield('main-content')
        </div>
    </body>
</html>

child.blade.php:

@extends('parent')

@section('styling')
.main {
    color: red;
}
@stop

@section('main-content')
This is child page!
@stop

otherpage.blade.php:

@extends('parent')

@section('styling')
.main {
    color: blue;
}
@stop

@section('main-content')
This is another page!
@stop

Vous voyez ici deux exemples de pages enfants, qui étendent chacune le parent. Les pages enfants définissent une @section , qui est insérée dans le parent à l'instruction @yield appropriée.

Donc la vue rendue par View::make('child') dira " This is child page! " En rouge, alors que View::make('otherpage') produira le même html, sauf avec le texte " Ceci est un autre page! "en bleu à la place.

Il est courant de séparer les fichiers de vue, par exemple en ayant un dossier de mise en page spécifique aux fichiers de mise en page et un dossier distinct pour les différentes vues individuelles spécifiques.

Les mises en page sont destinées à appliquer du code qui devrait apparaître sur chaque page, par exemple en ajoutant une barre latérale ou un en-tête, sans avoir à écrire tout le code HTML dans chaque vue.

Les vues peuvent être étendues à plusieurs reprises - à savoir page3 peut @extend('page2') , et page2 peut @extend('page1') .

La commande extend utilise la même syntaxe que celle utilisée pour View::make et @include , de sorte que le fichier layouts/main/page.blade.php est accessible en tant que layouts.main.page .

Partage de données à toutes les vues

Parfois, vous devez définir les mêmes données dans plusieurs de vos vues.

Using View :: share

// "View" is the View Facade
View::share('shareddata', $data);

Après cela, le contenu de $data sera disponible dans toutes les vues sous le nom $shareddata .

View::share est généralement appelé dans un fournisseur de services, ou peut-être dans le constructeur d'un contrôleur, de sorte que les données seront partagées uniquement dans les vues renvoyées par ce contrôleur.

Using View :: composer

Les compositeurs de vue sont des méthodes de rappel ou de classe appelées lors du rendu d'une vue. Si vous souhaitez associer des données à une vue chaque fois que cette vue est rendue, un compositeur de vue peut vous aider à organiser cette logique en un seul emplacement. Vous pouvez directement lier variable à une vue spécifique ou à toutes les vues.

Compositeur basé sur la fermeture

use Illuminate\Support\Facades\View;

// ...

View::composer('*', function ($view) {
    $view->with('somedata', $data);
});

Compositeur en classe

use Illuminate\Support\Facades\View;

// ...

View::composer('*', 'App\Http\ViewComposers\SomeComposer');

Comme avec View::share , il est préférable d'enregistrer les compositeurs dans un fournisseur de services.

Si vous App/Http/ViewComposers/SomeComposer.php approche de la classe composer, vous aurez App/Http/ViewComposers/SomeComposer.php avec:

use Illuminate\Contracts\View\View;

class SomeComposer
{
    public function compose(View $view)
    {
        $view->with('somedata', $data);
    }
}

Ces exemples utilisent '*' dans l'enregistrement du compositeur. Ce paramètre est une chaîne qui correspond aux noms de vues pour lesquels enregistrer le compositeur ( * étant un caractère générique). Vous pouvez également sélectionner une vue unique (par exemple, 'home' ) d'un groupe de routes sous un sous-dossier (par exemple, 'users.*' ).

Exécuter du code PHP arbitraire

Bien que cela puisse ne pas être approprié dans une vue si vous avez l'intention de séparer strictement les préoccupations, la directive php Blade permet d'exécuter du code PHP, par exemple pour définir une variable:

@php($varName = 'Enter content ')

(pareil que:)

@php
    $varName = 'Enter content ';
@endphp

plus tard:

{{ $varName }}

Résultat:

Entrer du contenu



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow