Modèle de lame


"Modèle de lame"

    Afficher les données
  • Blade & JavaScript Framework
  • Switch Statement
  • Loop
    • Loop Variable
    • Commentaires
  • PHP
  • Pile
  • Personnalisée If Statement
  • Introduction
  • Blade est un moteur de modèle simple mais puissant fourni par Laravel. Contrairement à d'autres moteurs de modèles PHP populaires, Blade ne vous empêche pas d'utiliser du code PHP natif dans vos vues. Tous les fichiers de vue Blade seront compilés en code PHP natif et mis en cache, et ne seront pas recompilés à moins qu'ils ne soient modifiés, ce qui signifie que Blade n'ajoutera fondamentalement aucune charge à votre application. Les fichiers de vue Blade utilisent le répertoire
  • .
    • Héritage des modèles

Définir la mise en page

Les deux principaux avantages de Blade sont l'héritage de modèle et les blocs. Pour commencer, commençons par un exemple simple. Tout d’abord, examinons une mise en page « principale ». Étant donné que la plupart des applications Web utilisent la même mise en page sur différentes pages, il est facile de définir une seule vue de mise en page Blade : 模板继承区块。为方便入门,让我们先通过一个简单的例子来上手。首先,我们来研究一个「主」页面布局。因为大多数 web 应用会在不同的页面中使用相同的布局方式,因此可以很方便地定义单个 Blade 布局视图:

<!-- 保存在  resources/views/layouts/app.blade.php 文件中 -->
<html>   
 <head>      
   <title>App Name - @yield('title')</title>    
 </head>   
 <body>
    @section('sidebar')
     This is the master sidebar.
     @show       
     <div class="container">
     @yield('content')       
      </div>   
  </body>
</html>

如你所见,该文件包含了典型的 HTML 语法。不过,请注意 @section@yield 指令。 @section 指令定义了视图的一部分内容,而 @yield 指令是用来显示指定部分的内容。

现在,我们已经定义好了这个应用程序的布局,接下来,我们定义一个继承此布局的子页面。

扩展布局

在定义一个子视图时,使用 Blade 的 @extends 指令指定子视图要「继承」的视图。扩展自 Blade 布局的视图可以使用 @section 指令向布局片段注入内容。就如前面的示例中所示,这些片段的内容将由布局中的显示在布局中 @yield 指令控制显示:

<!-- 保存在 resources/views/child.blade.php 中 -->
@extends('layouts.app')
@section('title', 'Page Title')
@section('sidebar')
    @parent    
    <p>This is appended to the master sidebar.</p>
    @endsection
@section('content')   
 <p>This is my body content.</p>
@endsection

在这个示例中, sidebar 片段利用 @parent 指令向布局的 sidebar 追加(而非覆盖)内容。 在渲染视图时,@parent 指令将被布局中的内容替换。

{tip} 和上一个示例相反,这里的  sidebar 片段使用  @endsection 代替 @show 来结尾。 @endsection 指令仅定义了一个片段, @show 则在定义的同时 立即 yield 这个片段。

Blade 视图可以使用全局  view 助手自路由中返回:

Route::get('blade', function () {  
  return view('child');
});

组件 & 插槽

组件和插槽提供了与片段和布局类似的好处;不过组件和插槽的思维模型更易于理解。我们先来看一个可复用的「alert」组件,我们想在应用中复用它:

<!-- /resources/views/alert.blade.php -->
<div class="alert alert-danger">   
 {{ $slot }}
</div>

{{ $slot }} 变量将包含我们想要注入到组件的内容。现在,我们使用 Blade 的 @component  指令构建这个组件:

@component('alert') 
<strong>Whoops!</strong> Something went wrong!
@endcomponent

有时候为一个组件定义多个插槽是很有用的。修改 alert 组件以允许其注入 「title」。命名插槽可以通过与其匹配的 「回显」 变量显示:

<!-- /resources/views/alert.blade.php -->
<div class="alert alert-danger">  
  <div class="alert-title">{{ $title }}</div>    
  {{ $slot }}
 </div>

现在,我们能够使用 @slot 指令向命名插槽注入内容。不在  @slot 指令内的内容都将传递给组件中的  $slot

@component('alert')
    @slot('title')
        Forbidden
    @endslot
You are not allowed to access this resource!@endcomponent

Comme vous pouvez le voir, ce fichier contient une syntaxe HTML typique. Cependant, veuillez être conscient des directives @section et @yield. La directive @section définit une partie de la vue et la directive @yield est utilisée pour afficher le contenu de la section spécifiée.
Maintenant que nous avons défini la mise en page de cette application, nous définissons ensuite une sous-page qui hérite de cette mise en page. 🎜🎜🎜
🎜🎜Extension de la mise en page🎜🎜Lors de la définition d'une sous-vue, utilisez le @extends spécifie les vues qui doivent être "héritées" par la sous-vue. Les vues qui étendent la disposition Blade peuvent injecter du contenu dans les sections de disposition à l'aide de la directive @section. Comme le montre l'exemple précédent, le contenu de ces fragments sera affiché par la directive @yield dans la mise en page : 🎜
@component('alert', ['foo' => 'bar'])  
  ...
@endcomponent
🎜Dans cet exemple, les fragments sidebar utilisent le < code>@parent pour ajouter (plutôt que d'écraser) le contenu à la barre latérale de la mise en page. Lorsque la vue est rendue, la directive @parent sera remplacée par le contenu de la mise en page. 🎜
🎜{tip} Contrairement à l'exemple précédent, ici le fragment sidebar se termine par @endsection au lieu de @show. La directive @endsection définit uniquement une section, tandis que @show rend cette section immédiatement lors de sa définition. 🎜
🎜Les vues Blade peuvent être renvoyées à partir des routes à l'aide de l'assistant global view : 🎜
use Illuminate\Support\Facades\Blade;
Blade::component('components.alert', 'alert');
🎜🎜
🎜

Composants et emplacements

🎜Les composants et les emplacements offrent des avantages similaires aux fragments et aux mises en page, mais le modèle mental des composants et des emplacements est plus facile à comprendre. Regardons d'abord un composant "alerte" réutilisable que nous souhaitons réutiliser dans notre application : 🎜
@alert(['type' => 'danger'])
    You are not allowed to access this resource!@endalert
🎜{{ $slot }} La variable contiendra le contenu que nous souhaitons injecter dans le composant. Maintenant, nous construisons ce composant en utilisant la directive @component de Blade : 🎜
@alert
    You are not allowed to access this resource!@endalert
🎜Parfois, il est utile de définir plusieurs emplacements pour un composant. Modifiez le composant d'alerte pour lui permettre d'injecter "titre". Les emplacements nommés peuvent être affichés via leur variable "echo" correspondante : 🎜
Route::get('greeting', function () {  
  return view('welcome', ['name' => 'Samantha']);
});
🎜 Nous pouvons maintenant injecter du contenu dans les emplacements nommés en utilisant la directive @slot. Le contenu ne figurant pas dans la directive @slot sera transmis à la variable $slot dans le composant : 🎜
Hello, {{ $name }}.
🎜🎜

Transmission de données supplémentaires au composant

Parfois, vous devrez peut-être transmettre des données supplémentaires au composant. Dans ce cas, les données contenant peuvent être organisées dans un tableau comme deuxième paramètre de la directive @component. Toutes les données seront fournies au modèle de composant sous forme de modifications : @component 指令的第二个参数。所有的数据将作为变更提供给组件模板:

The current UNIX timestamp is {{ time() }}.

给组件起别名

如果组件存储在子目录中,你可能希望给它们起个别名以方便访问。举例来说,如果一个 Blade 组件存储在 resources/views/components/alert.blade.php 中,. 就可以使用 component 方法将 components.alert 的别名命名为 alert。. 通常情况下,这一过程将在 AppServiceProvider 的  boot 方法中完成:

Hello, {!! $name !!}.

一旦组件有了别名,就可以使用一条指令渲染它:

<script>  
  var app = <?php echo json_encode($array); ?>;
</script>

如果没有额外的插槽,还可以省略组件参数:

<script> 
   var app = @json($array);
</script>

显示数据

可以通过包裹在双花括号内的变量显示传递给 Blade 视图的数据。比如给出如下路由:

<?php
   namespace App\Providers;
   use Illuminate\Support\Facades\Blade;
   use Illuminate\Support\ServiceProvider;
   class AppServiceProvider extends ServiceProvider{   
    /**
     * 引导任意应用服务。
     *
     * @return void
     */  
   public function boot()   
    {       
     Blade::withoutDoubleEncoding();   
     }
  }

就可以这样利用 name 变量显示其内容:

<h1>Laravel</h1>Hello, @{{ name }}.

{tip} Blade {{ }} 语句是自动经过  PHP 的 htmlspecialchars 函数传递来防范  XSS 攻击的。

不限于显示传递给视图的变量的内容,你还可以显示任一 PHP 函数的结果。实际上,你可以在 Blade 的回显语句中放置你想要的任意 PHP 代码:

@verbatim   
 <div class="container">
        Hello, {{ name }}.  
  </div>@endverbatim

显示非转义字符

默认情况下, Blade 中 {{ }} 语句自动经由 PHP 的 htmlspecialchars 函数传递以防范 XSS 攻击。如果不希望数据被转义,可以使用下面的语法:

@if (count($records) === 1)  
  I have one record!
@elseif (count($records) > 1)   
   I have multiple records!
@else  
    I don't have any records!
 @endif

{note} 在回显应用的用户提供的内容时需要谨慎小心。在显示用户提供的数据时,有必要一直使用双花括号语法转义来防范 XSS 攻击。

渲染 JSON

有时,为了初始化一个 JavaScript 变量,你可能会向视图传递一个数据,并将其渲染成 JSON:

@unless (Auth::check())
    You are not signed in.@endunless

不过,你可以使用 @json Blade 指令代替手动调用 json_encode 函数:

@isset($records) 
   // $records 被定义且不是 null...
@endisset

@empty($records)   
 // $records 为空...
@endempty

HTML 实体编码

默认情况下,Blade (以及 Laravel 的 e 助手)将对 HTML 实体双重编码。如果要禁用双重编码,可以在 AppServiceProviderboot 中调用 Blade::withoutDoubleEncoding

@auth    // 此用户身份已验证...@endauth
@guest    // 此用户身份未验证...@endguest

Alias ​​​​des composants Si les composants sont stockés dans un sous-répertoire, vous souhaiterez peut-être pour leur donner des alias pour un accès plus facile. Par exemple, si un composant Blade est stocké dans resources/views/components/alert.blade.php, vous pouvez utiliser la méthode component pour mettre à jour components.alert L'alias de est nommé alert.

@auth('admin')    // 此用户身份已验证...@endauth
@guest('admin')    // 此用户身份未验证...@endguest
Une fois que le composant a un alias, il peut être rendu à l'aide d'une seule instruction :
@hasSection('navigation')
   <div class="pull-right">
 @yield('navigation')   
    </div>  
    <div class="clearfix">
    </div>
 @endif
. 🎜Vous pouvez également omettre les paramètres du composant s'il n'y a pas d'emplacements supplémentaires : 🎜
@switch($i)
    @case(1)
        First case...
        @break
    @case(2)
        Second case...
        @break
    @default   
        Default case...@endswitch
🎜🎜🎜
🎜

Affichage data

🎜Les données transmises à la vue Blade peuvent être affichées via des variables entourées de doubles accolades. Par exemple, étant donné le parcours suivant : 🎜
@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
 @endfor
@foreach ($users as $user)   
 <p>This is user {{ $user->id }}</p>
@endforeach
@forelse ($users as $user)   
 <li>{{ $user->name }}</li>
 @empty   
 <p>No users</p>
@endforelse
@while (true)  
  <p>I'm looping forever.</p>
 @endwhile
🎜 Vous pouvez utiliser la variable name pour afficher son contenu : 🎜
@foreach ($users as $user)
    @if ($user->type == 1)
        @continue
    @endif    
     <li>{{ $user->name }}</li>
    @if ($user->number == 5)
        @break
    @endif@endforeach
🎜{tip} Blade {{ }} L'instruction est automatique. Passée via la fonction htmlspecialchars de PHP pour empêcher les attaques XSS. 🎜
🎜Vous n'êtes pas limité à afficher le contenu des variables passées à la vue, vous pouvez également afficher les résultats de n'importe quelle fonction PHP. En fait, vous pouvez mettre n'importe quel code PHP dans l'instruction echo de Blade : 🎜
@foreach ($users as $user)
    @continue($user->type == 1)   
     <li>{{ $user->name }}</li>
    @break($user->number == 5)
  @endforeach
🎜🎜Affiche les caractères non échappés 🎜🎜Par défaut, le {{ } L'instruction dans Blade est automatiquement transmise via la fonction htmlspecialchars de PHP pour empêcher les attaques XSS. Si vous ne souhaitez pas que les données soient échappées, vous pouvez utiliser la syntaxe suivante : 🎜
@foreach ($users as $user)
    @if ($loop->first)
        This is the first iteration.
    @endif

    @if ($loop->last)
        This is the last iteration.
    @endif  
      <p>This is user {{ $user->id }}</p>
  @endforeach
🎜{note} Soyez prudent lorsque vous faites écho au contenu fourni par l'utilisateur depuis votre application. Lors de l'affichage des données fournies par l'utilisateur, il est nécessaire de toujours utiliser une syntaxe d'échappement à double accolade pour se protéger contre les attaques XSS. 🎜
🎜🎜Rendu JSON🎜🎜Parfois, afin d'initialiser une variable JavaScript, vous pouvez transmettre une donnée à la vue et la restituer en JSON : 🎜
@foreach ($users as $user)
    @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is first iteration of the parent loop.
        @endif
    @endforeach@endforeach
🎜Cependant, vous pouvez utiliser la directive Blade @json au lieu d'appeler manuellement la fonction json_encode : 🎜
{{-- This comment will not be present in the rendered HTML --}}
🎜 🎜HTML Entity Encoding🎜🎜Par défaut, Blade (et l'assistant e de Laravel) encodera deux fois les entités HTML. Si vous souhaitez désactiver le double encodage, vous pouvez appeler la méthode Blade::withoutDoubleEncoding dans le boot de AppServiceProvider : 🎜
@php    //@endphp
🎜🎜🎜🎜 🎜🎜

Blade & JavaScript Framework

Étant donné que de nombreux frameworks JavaScript utilisent également des accolades pour indiquer qu'une expression donnée sera affichée dans le navigateur, vous pouvez utiliser le symbole @ pour informer le moteur de rendu Blade qu'un certain l’expression doit rester inchangée. Un exemple est le suivant : @ 符号通知 Blade 渲染引擎某个表达式应保持不变。示例如下:

<form method="POST" action="/profile">
    @csrf   
    ...
</form>

在这个例子中, @ 符号将被 Blade 删除;在 Blade 引擎中 {{ name }} 表达式将保持不变,取而代之的是 JavaScript 引擎将渲染该表达式。

@verbatim 指令

如果要在大段的模板中 JavaScript 变量,可以将 HTML 包裹在 @verbatim 指令中,这样就不需要为每个 Blade 回显语句添加 @ 符号:

<form action="/foo/bar" method="POST">
    @method('PUT')    
    ...
</form>

控制结构

除了模板继承和数据显示, Blade 还为分支和循环等 PHP 控制结构提供了方便的快捷方式。这些快捷方式提供了干净、简捷地处理 PHP 控制结构的方法,同时保持了与 PHP 中的对应结构的相似性。

If 语句

可以使用 @if@elseif@else@endif 指令构造 if 语句。这些指令的功能与相应的 PHP 指令相同:

<div>
    @include('shared.errors')   
   <form>       
    <!-- Form Contents -->    
  </form>
</div>

方便起见, Blade 还提供了 @unless 指令:

@include('view.name', ['some' => 'data'])

除了已经讨论过的条件指令, @isset@empty 指令可以作为各自对应的 PHP 函数的快捷方式:

@includeIf('view.name', ['some' => 'data'])

身份验证指令

@auth@guest 指令能够用于快速确定当前用户是经过身份验证的,还是一个访客:

@includeWhen($boolean, 'view.name', ['some' => 'data'])

如果需要,可以在使用 @auth@guest 指令时指定应被校验的 身份 :

@includeFirst(['custom.admin', 'admin'], ['some' => 'data'])

片段指令

可以使用 @hasSection 指令检查片断是否存在内容:

<input type="{{ $type ?? 'text' }}">

Switch 指令

可以使用  @switch@case@break@default@endswitch

use Illuminate\Support\Facades\Blade;
Blade::include('includes.input', 'input');

Dans cet exemple, le symbole @ sera supprimé par Blade ; dans le moteur Blade, l'expression {{ name }} restera inchangé et remplacé par C'est le moteur JavaScript qui restituera l'expression.

@verbatim directive

Si vous souhaitez utiliser des variables JavaScript dans un grand modèle, vous pouvez envelopper HTML Dans la directive @verbatim, cela élimine le besoin d'ajouter le symbole @ pour chaque instruction d'écho Blade :

@input(['type' => 'email'])
🎜
🎜

Structure de contrôle

🎜En plus de l'héritage des modèles et de l'affichage des données, Blade fournit également des raccourcis pratiques pour les structures de contrôle PHP telles que les branches et les boucles. . Ces raccourcis offrent un moyen clair et simple de travailler avec les structures de contrôle PHP tout en conservant la similitude avec leurs homologues PHP. 🎜🎜
🎜🎜
🎜🎜Si l'instruction 🎜🎜 peut utiliser @if, Les directives @elseif, @else et @endif construisent des instructions if. Ces directives fonctionnent de manière identique aux directives PHP correspondantes : 🎜
@each('view.name', $jobs, 'job')
🎜Pour plus de commodité, Blade fournit également la directive @unless : 🎜
@each('view.name', $jobs, 'job', 'view.empty')
🎜En plus des directives conditionnelles déjà évoquées, @isset et @empty peuvent être utilisées comme raccourcis vers leurs fonctions PHP respectives : 🎜
@push('scripts')  
  <script src="/example.js">
  </script>
@endpush
🎜

Directive d'authentification🎜Les directives @auth et @guest peuvent être utilisées pour déterminer rapidement si l'utilisateur actuel est authentifié ou un invité : 🎜
<head> 
   <!-- 头部内容 -->
    @stack('scripts')
 </head>
🎜Si nécessaire, vous pouvez utiliser < code Les directives >@auth
et @guest précisent l'identité qui doit être vérifiée : 🎜
@push('scripts')
    This will be second...@endpush// 然后...
  @prepend('scripts')
    This will be first...
  @endprepend
🎜

fragment Commands< /h4>🎜Vous pouvez utiliser la commande @hasSection pour vérifier si la section a du contenu : 🎜
@inject('metrics', 'App\Services\MetricsService')
<div>
    Monthly Revenue: {{ $metrics->monthlyRevenue() }}.</div>
🎜
🎜🎜
🎜🎜La commande Switch 🎜🎜 peut utiliser @switch, @case, @break, @default< Les instructions /code > et @endswitch construisent des instructions switch : 🎜
<?php
  namespace App\Providers;
  use Illuminate\Support\Facades\Blade;
  use Illuminate\Support\ServiceProvider;
  class AppServiceProvider extends ServiceProvider{  
     /**
     * 执行注册后引导服务.
     *
     * @return void
     */   
   public function boot()  
     {       
        Blade::directive('datetime', function ($expression) {           
        return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";       
      });    
    }   
    /**
     * 在容器中注册绑定.
     *
     * @return void
     */ 
      public function register()  
        { 
             //    
         }
      }
🎜🎜🎜🎜🎜🎜

Boucles

En plus des instructions de branchement, Blade fournit également des instructions simplifiées qui sont les mêmes que la structure de boucle de PHP. Les fonctions de ces instructions sont également les mêmes que les instructions PHP correspondantes :

<?php echo ($var)->format('m/d/Y H:i'); ?>

{tip} Vous pouvez utiliser des variables de boucle dans une boucle pour obtenir des informations évaluables sur la boucle, par exemple si vous en êtes à la première itération ou la dernière itération de la boucle :

Dans une boucle, vous pouvez également terminer la boucle ou passer par cette itération :

use Illuminate\Support\Facades\Blade;
/**
 * 执行注册后引导服务
 *
 * @return void
 */
 public function boot(){  
   Blade::if('env', function ($environment) {     
   return app()->environment($environment);   
   });
 }

Vous pouvez également déclarer des instructions avec des conditions sur une seule ligne :

@env('local')    
  // 应用在本地环境中运行...
@elseenv('testing')    
  // 应用在测试环境中运行...
@else    
  // 应用没有在本地和测试环境中运行...
@endenv

Loop variables

Pendant la boucle, dans Il y a une variable $loop disponible dans le corps de la boucle. Cette variable donne accès à un petit nombre d'informations utiles comme l'index de la boucle en cours et s'il s'agit de la première ou de la dernière boucle : $loop 变量。该变量提供了用于访问诸如当前循环的索引、当前是否为第一次或最后一次循环之类的少数有用的信息的途径:

rrreee

在嵌套循环中,可以借助 parent 属性访问父循环的 $loop 变量:

rrreee

$loop 变量还包含其它几种有用的属性:

Dans les boucles imbriquées, vous pouvez utiliser les accès à la propriété parent la variable $loop de la boucle parent : $loop La variable contient également plusieurs autres propriétés utiles :
属性描述
$loop->index当前迭代的索引(从 0 开始计数)。
$loop->iteration当前循环迭代 (从 1 开始计算)。
$loop->remaining循环中剩余迭代的数量。
$loop->count被迭代的数组元素的总数。
$loop->first是否为循环的第一次迭代。
$loop->last是否为循环的最后一次迭代。
$loop->depth当前迭代的嵌套深度级数。
$loop->parentrrreeerrreee
< thead>< tr class="firstRow">
AttributDescription
$loop->index
🎜L'index de l'itération en cours (en comptant à partir de 0). 🎜🎜$loop->iteration🎜🎜Itération de la boucle actuelle (à partir de 1 pour commencer à compter). 🎜🎜$loop->remaining🎜🎜Les itérations restantes dans le quantité de boucle. 🎜🎜$loop->count🎜🎜Le total des éléments du tableau itéré nombre. 🎜🎜$loop->first Est-ce que 🎜🎜 est le premier des boucle ? une itération. 🎜🎜$loop->last Est 🎜🎜 le dernier des boucle ? une itération. 🎜🎜$loop->profondeur🎜🎜L'imbrication du courant itération série Depth. 🎜🎜$loop->parent🎜🎜Dans une boucle imbriquée, La variable de boucle de la boucle parent🎜🎜🎜🎜

Annotations

Blade permet également de définir des annotations dans les vues. Cependant, contrairement aux commentaires HTML, les commentaires Blade ne sont pas inclus dans le HTML renvoyé à l'application :

rrreee

PHP

Dans certains cas, il est utile d'embarquer du code PHP dans la vue. Vous pouvez utiliser la directive @php dans le modèle pour exécuter des blocs de code PHP natifs : @php 指令执行原生的 PHP 代码块:

rrreee

{tip} 尽管 Blade 提供了这个特性,但频繁使用意味着模板中嵌入了过多的逻辑。

表单

CSRF 域

只要在应用中定义了 HTML 表单,就一定要在表单中包含隐藏的 CSRF 令牌域,这样一来 CSRF 保护 中间件就能校验请求。可以使用 Blade 的 @csrf 指令生成令牌域:

rrreee

Method 域

HTML 表单不能发出 PUTPATCHDELETE 请求,需要加入隐藏的 _method 域来模仿这些 HTTP 动词。Blade 的 @method 指令能够帮你创建这个域:

rrreee

引入子视图

Blade 的 @include 指令允许你从其它视图中引入 Blade 视图。父视图中所有可用的变量都将在被引入的视图中可用:

rrreee

被包含的视图不仅会继承父视图的所有可用数据,还能够以数组形式向被包含的视图传递额外数据:

rrreee

如果传递给  @include 一个不存在的视图,Laravel 会抛出错误。想要包含一个不能确定存在与否的视图,需要使用 @includeIf 指令:

rrreee

想要包含一个依赖于给定布尔条件的视图,可以使用 @includeWhen 指令:

rrreee

要包含给定视图数组中第一个存在的视图,可以使用 includeFirst 指令:

rrreee

{note} 应当尽量避免在 Blade 视图中使用 __DIR____FILE__rrreee

{tip} Bien que Blade fournisse cette fonctionnalité, une utilisation fréquente signifie que trop d'éléments sont intégrés dans le logique du modèle.
🎜🎜
🎜

formulaire

🎜
🎜🎜
🎜🎜Champ CSRF🎜🎜Tant que le formulaire HTML est défini dans l'application, le champ du jeton CSRF masqué doit être inclus dans le formulaire, afin que la protection CSRF soit dans le fichier du milieu pour vérifier la demande. Vous pouvez utiliser la directive @csrf de Blade pour générer le champ de jeton : 🎜rrreee🎜🎜🎜
🎜 🎜Champ de méthode🎜🎜Les formulaires HTML ne peuvent pas émettre de requêtes PUT, PATCH et DELETE, ainsi que le champ caché _method doit être ajouté pour imiter ces verbes HTTP. La directive @method de Blade peut vous aider à créer ce domaine : 🎜rrreee🎜🎜🎜
🎜

Introduire des sous-vues

🎜La directive @include de Blade vous permet d'importer des vues Blade à partir d'autres vues. Toutes les variables disponibles dans la vue parent seront disponibles dans la vue incluse : 🎜rrreee🎜La vue incluse héritera non seulement de toutes les données disponibles de la vue parent, mais pourra également transmettre des données supplémentaires à la vue incluse sous la forme de un tableau : 🎜rrreee 🎜Si vous transmettez une vue inexistante à @include, Laravel générera une erreur. Pour inclure une vue dont l'existence est incertaine, utilisez la directive @includeIf : 🎜rrreee🎜Pour inclure une vue qui dépend d'une condition booléenne donnée, utilisez la directive @includeWhen code> : 🎜rrreee🎜Pour inclure la première vue existante dans un tableau de vues donné, vous pouvez utiliser la directive includeFirst : 🎜rrreee
🎜{note} doit être évité dans les vues Blade __DIR__. et __FILE__ sont des constantes magiques car elles pointeront vers l'emplacement de la vue compilée dans le cache. 🎜🎜🎜🎜

Donner des alias aux vues incluses

Si vos vues incluses dans Blade sont stockées dans des sous-répertoires, vous souhaiterez peut-être leur donner des alias facilement accessibles. Par exemple, le contenu d'une vue Blade avec le contenu suivant est stocké dans le fichier resources/views/includes/input.blade.php : resources/views/includes/input.blade.php 文件中:

rrreee

可以使用 include 方法为  includes.input 起一个叫做 input 的别名。通常,这会在 AppServiceProviderboot 方法中完成:

rrreee

一旦被包含的视图拥有了别名,就可以像 Blade 指令一样使用别名渲染它:

rrreee

为集合渲染视图

可以使用 Blade 的 @each 指令在一行中整合循环和包含:

rrreee

第一个参数是渲染数组或集合的每个元素的视图片段。第二个参数是希望被迭代的数组或集合,第三个参数则是将被分配给视图中当前迭代的变量名。例如,想要迭代 jobs 数组,通常会在视图片段中使用 job 变量访问每个任务。当前迭代的 key 将作为视图片段中的 key 变量。

也可以向 @each 指令传递第四个参数。这个参数是当给定数组为空时要渲染的视图片段。

rrreee

{note} 借助 @each 渲染视图,无法从父视图中继承变量。如果子视图需要这些变量,就必须使用 @foreach@include 代替它。

堆栈

Blade 允许你将视图压入堆栈,这些视图能够在其它视图或布局中被渲染。这在子视图中指定需要的 JavaScript 库时非常有用:

rrreee

如果需要,可以多次压入堆栈。通过向  @stack 指令传递堆栈名称来完成堆栈内容的渲染:

rrreee

如果想要将内容预置在栈顶,需要使用 @prepend 指令:

rrreee

Service 注入

@inject 指令可以用于自 Laravel 的 服务容器 中获取服务。传递给 @injectrrreee

Vous pouvez utiliser le include méthode car includes.input alias input. Généralement, cela se fait dans la méthode boot de AppServiceProvider :

rrreeeUne fois que la vue contenue a un alias, elle peut être rendue en utilisant l'alias comme la directive Blade : rrreee

🎜

Rendu des vues pour les collections

🎜Vous pouvez utiliser Blade La directive @each combine le bouclage et l'inclusion sur une seule ligne : 🎜rrreee🎜Le premier paramètre est un fragment de vue qui restitue chaque élément du tableau ou de la collection. Le deuxième paramètre est le tableau ou la collection sur laquelle vous souhaitez parcourir, et le troisième paramètre est le nom de la variable qui sera affectée à l'itération en cours dans la vue. Par exemple, si vous souhaitez parcourir le tableau jobs, vous accéderez généralement à chaque tâche en utilisant la variable job dans le fragment de vue. La clé de l'itération en cours sera utilisée comme variable key dans le fragment de vue. 🎜🎜Vous pouvez également passer un quatrième paramètre à la directive @each. Ce paramètre est le fragment de vue à restituer lorsque le tableau donné est vide. 🎜rrreee
🎜{note} Avec @each rendant une vue, les variables ne peuvent pas être héritées de la vue parent. Si une sous-vue nécessite ces variables, elle doit utiliser @foreach et @include à la place. 🎜
🎜
🎜🎜
🎜

Stacks

🎜Blade vous permet de placer des vues sur la pile , Ces vues peuvent être restituées dans d'autres vues ou mises en page. Ceci est utile lors de la spécification des bibliothèques JavaScript requises dans les sous-vues : 🎜rrreee🎜Vous pouvez pousser plusieurs fois sur la pile si nécessaire. Le rendu du contenu de la pile se fait en passant le nom de la pile à la directive @stack : 🎜rrreee🎜Si vous souhaitez prédéfinir le contenu en haut de la pile, vous devez utiliser le Directive @prepend : 🎜 rrreee🎜
🎜🎜
🎜

Injection de service

🎜< directive code>@inject Peut être utilisée pour obtenir des services à partir du conteneur de services de Laravel. Le premier paramètre passé à @inject est le nom de la variable de service à insérer, et le deuxième paramètre est le nom de la classe ou de l'interface qui devrait être résolue : 🎜rrreee🎜🎜🎜🎜 🎜🎜

Extension Blade

Blade vous permet de personnaliser les directives à l'aide de la méthode directive. Lorsque le compilateur Blade rencontre une directive personnalisée, cela appelle le rappel fourni par l'expression contenue dans la directive. directive 方法自定义指令。当 Blade 编译器遇到自定义指令时,这会调用该指令包含的表达式提供的回调。

下面的例子创建了 @datetime($var) 指令,一个格式化给定的 DateTime 的实例 $var

rrreee

如你所见,我们将在传递给该指令的任意表达式中链式调用  format 方法。在这个例子中,该指令将生成如下原生 PHP 代码:

rrreee

{note} 在更新 Blade 指令的逻辑之后,需要 Blade 视图的所有缓存。可以使用  view:clear Artisan 命令删除 Blade 视图缓存。

自定义 If 语句

在定义简单的、自定义条件语句时,编写自定义指令比必须的步骤复杂。在这种情况下,Blade 提供了 Blade::if 方法,它允许你使用闭包快速度定义条件指令。例如,定义一个校验当前应用环境的自定义指令,可以在  AppServiceProviderboot

L'exemple suivant crée la directive @datetime($var), une instance de $var qui formate le DateTime donné :

rrreee

Comme vous pouvez le voir, nous enchaînerons la méthode format dans toute expression passée à cette directive. Dans cet exemple, la directive générera le code PHP natif suivant :
🎜
🎜

Instruction If personnalisée

🎜Dans la définition Quand lorsqu'il s'agit d'instructions conditionnelles simples et personnalisées, l'écriture d'instructions personnalisées est plus compliquée que nécessaire. Dans ce cas, Blade fournit la méthode Blade::if, qui vous permet de définir rapidement des instructions conditionnelles à l'aide de fermetures. Par exemple, pour définir une instruction personnalisée pour vérifier l'environnement d'application actuel, vous pouvez le faire dans la méthode boot de AppServiceProvider : 🎜rrreee🎜Une fois l'instruction conditionnelle personnalisée définie , Peut être facilement utilisé dans des modèles : 🎜rrreee🎜 Cet article a été publié pour la première fois sur le site Web 🎜LearnKu.com🎜. 🎜🎜