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