Le moteur de modèles de Laravel utilise le moteur de modèles Blade. L'article suivant vous présente principalement les informations pertinentes sur le moteur de modèles Blade dans Laravel. L'article le présente en détail à travers un exemple de code, ce qui est d'une certaine importance pour l'étude ou l'étude de chacun. travail En référence à la valeur d'apprentissage, les amis qui en ont besoin peuvent suivre l'éditeur pour apprendre ensemble.
Avant-propos
Cet article vous présente principalement le contenu pertinent sur le moteur de modèles Blade dans Laravel, et le partage pour votre référence et votre étude . Assez dit, jetons un œil à l’introduction détaillée.
Moteur de modèles Blade
Blade est un moteur de modèles simple et puissant fourni par Laravel. Il compile la vue Blade en PHP natif. codez-le et mettez-le en cache. Le cache change lorsque la vue Blade change, ce qui signifie que Blade n'ajoute aucune charge de compilation à votre application. Les fichiers de vue Blade utilisent le suffixe .blade.php et sont généralement stockés dans le répertoire resources/views.
Héritage de modèles
Regardons d'abord un exemple
<!-- Stored in resources/views/layouts/master.blade.php--> <html> <head> <title>App Name - @yield('title')</title> </head> <body> @section('sidebar') This is the master sidebar. @show <p class="container"> @yield('content') </p> </body> </html>
Les fichiers de modèles Blade contiennent un balisage HTML typique. Vous devez avoir vu les directives @section et @yield. La directive @section définit une section de contenu comme son nom l'indique, tandis que la directive @yield est utilisée pour afficher le contenu contenu dans la section widget fournie. Maintenant que nous avons défini une disposition de base, nous pouvons utiliser la directive @extends de Blade pour hériter explicitement de cette disposition. Utilisez ensuite la directive @section pour monter le contenu du widget dans la mise en page. Dans l'exemple ci-dessus, le contenu du widget sera monté dans la section @yield de la mise en page :
<🎜. >
<!-- Stored in resoures/views/child.blade.php --> @extends('layouts.master') @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
Route::get('blade', function () { return view('child'); });
Afficher les données
<🎜. >
Route::get('greeting', function () { return view('welcome', ['name' => 'Duicode']); })
Hello, {{ $name }}
The current UNIX timestamp is {{ time() }}
Hello, @{{ name }}
{{ isset($name) ? $name : 'Default' }}
{{ $name or 'Default' }}
Hello, {!! $name !!}
Structure de contrôle
Vous pouvez utiliser la structure de contrôle if via les directives @if, @elseif, @else et @endif :
@if (count($records) === 1) I have one record! @elseif (count($records) > 1) I have multiple records! @else I don't have any records! @endif
@unless (Auth::check()) You are not signed in. @endunless
<title> @hasSection('title') @yield('title') - App Name @else App Name @endif </title>
@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
@foreach ($users as $user) @if($user->type == 1) @continue @endif <li>{{ $user->name }}</li> @if($user->number == 5) @break @endif @endforeach
@foreach ($users as $user) @continue($user->type == 1) <li>{{ $user->name }}</li> @break($user->number == 5) @endforeach
Y compris les sous-vues
Vous pouvez utiliser la directive @include Pour contenir le contenu d'une vue, les variables de la vue actuelle seront également partagées avec la sous-vue :
<p> @include('shared.errors') <form> <!-- Form Contents --> </form> </p>
@include('view.name', ['some' => 'data'])
@each('view.name', $jobs, 'job')
Le deuxième paramètre est un tableau ou une collection utilisée pour fournir une itération.
第三个参数是要分配给当前视图的变量名。
你也可以传递第四个参数到 @each 指令。如果所提供的数组是空数组的话,该参数所提供的视图将会被引入。
@each('view.name', $jobs, 'job', 'view.empty')
Blade 中的注释,这样写不会被渲染:
{{-- This comment will not be present in the rendered HTML --}}
Blade 允许你在已命名的堆中压入内容:
@push('scripts') <script src="/example.js"></script> @endpush
你可以在你需要的时候压入相同的堆任意的次数,你需要在布局中使用 @stack 来渲染堆:
<head> <!-- Head Contents --> @stack('scripts') </head>
可以使用 @inject 指令来从服务容器中取回服务:
@inject('metrics', 'App\Services\MetricsService') <p> Monthly Revenue: {{ $metrice->monthlyRevenue() }} </p>
第一个参数将作为所取回服务存放的变量名,
第二个参数是你想要在服务容器中取回的类或接口名称。
可以使用 directvie 方法来注册指令。当 Blade 编译器遇到该指令时,它会自动的调用该指令注册时提供的回调函数并传递它的参数。
下面的例子创建了 @datetime($val) 指令来格式化 $val:
<?php namespace App\Providers; use Blade; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider{ /** * Perform post-registration booting of services. * * @return void */ public function boot(){ Blade::directive('datetime', function ($expression) { return "<?php echo with{$express}->format('m/d/Y H:i'); ?>"; }); } /** * Register bindings in the container * * @return void */ public function register() { // } }
上面的例子中使用了 Laravel 的 with 帮助方法,它只是简单的返回一个所提供的对象或值,并提供方便的链式调用。最终该指令生成的 PHP 代码如下:
<?php echo with($var)->format('m/d/Y H:i'); ?>
在你更新 Blade 指令的逻辑之后,你应该删除所有已缓存的 Blade 视图,你可以使用 view:clear Artisan 命令来清除。
总结
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!