Maison php教程 PHP源码 Laravel模板引擎Blade中section的一些标签的区别介绍_php技巧

Laravel模板引擎Blade中section的一些标签的区别介绍_php技巧

May 25, 2016 pm 05:12 PM
blade laravel section 区别 标签 模板引擎

这篇文章主要介绍了Laravel模板引擎Blade中section的一些标签的区别介绍,本文讲解了@yield 与 @section、@show 与 @stop、@append 和 @override的区别,需要的朋友可以参考下

Laravel 框架中的 Blade 模板引擎,很好用,但是在官方文档中有关 Blade 的介绍并不详细,有些东西没有写出来,而有些则是没有说清楚。比如,使用中可能会遇到这样的问题:

1.@yield 和 @section 都可以预定义可替代的区块,这两者有什么区别呢?
2.@section 可以用 @show, @stop, @overwrite 以及 @append 来结束,这三者又有什么区别呢?

本文试对这些问题做一个比较浅显但是直观的介绍。

@yield 与 @section

首先,@yield 是不可扩展的,如果你要定义的部分没有默认内容让子模板扩展的,那么用 @yield($name, $default) 的形式会比较方便,如果你在子模板中并没有指定这个区块的内容,它就会显示默认内容,如果定义了,就会显示你定义的内容。非此即彼。

与之相比, @section 则既可以被替代,又可以被扩展,这是最大的区别。比如:

 代码如下:

{{-- layout.master --}}
@yield('title','默认标题')
 
@section('content')
默认的内容
@show
Copier après la connexion


代码如下:

{{-- home.index --}}
@extends('layout.master')
 
@section('title')
  @parent
  新的标题
@stop
 
@section('content')
  @parent
  扩展的内容
@stop
Copier après la connexion

上面的例子中,模板用 @yield 和 @section 分别定义了一个区块,然后在子模板中去定义内容,由于 @yield 不能被扩展,所以即使加上了 @parent 也不起作用,输出的内容只有“新的标题”,替换了“默认的标题”。因此最终生成的页面只能是“默认的标题”或者“新的标题”,不能并存。而 @section 定义的部分,由于使用了 @parent 关键字,父模板中的内容会被保留,然后再扩展后添加的内容进去,输出的内容会是 “默认的内容 扩展的内容”。

官方网站上的文档中并没有涉及 @parent关键字,说的是默认行为是“扩展”,要覆盖需要用 @override 来结束,这是错的,[github 上的最新文档][docs] 已经做了修正。@section 加上 @stop,默认是替换(注入),必须用 @parent 关键字才能扩展。而@override 关键字实际上有另外的应用场景。

@show 与 @stop

接下来再说说与 @section 对应的结束关键字,@show, @stop 有什么区别呢?(网上的部分文章,以及一些编辑器插件还会提示 @endsection, 这个在 4.0 版本中已经被移除,虽然向下兼容,但是不建议使用)。

@show 指的是执行到此处时将该 section 中的内容输出到页面,而 @stop 则只是进行内容解析,并且不再处理当前模板中后续对该section的处理,除非用 @override覆盖(详见下一部分)。通常来说,在首次定义某个 section 的时候,应该用 @show,而在替换它或者扩展它的时候,不应该用 @show,应该用 @stop。下面用例子说明:

代码如下:

{{-- layout.master --}}
<p id="zoneA">
  @section(&#39;zoneA&#39;)
      AAA
      @show
     
   
</p>
 
 
 
 
<p id="zoneB">
  @section(&#39;zoneB&#39;)
      BBB
      @stop
     
   
</p>
 
 
 
 
<p id="zoneC">
  @section(&#39;zoneC&#39;)
      CCC
      @show
     
   
</p>
Copier après la connexion


代码如下:

{{-- page.view --}}
@extends(&#39;layout.master&#39;)
 
@section(&#39;zoneA&#39;)
aaa
@stop
 
@section(&#39;zoneB&#39;)
bbb
@stop
 
@section(&#39;zoneC&#39;)
ccc
@show
Copier après la connexion

在 layout.master 中,用 @stop 来结束 "zoneB",由于整个模板体系中,没有以 @show 结束的 "zoneB" 的定义,因此这个区块不会被显示。而在 page.view 中,用 @show 定义了 'zoneC',这会在执行到这里时立即显示内容,并按照模板继承机制继续覆盖内容,因此最终显示的内容会是:

代码如下:

ccc // 来自 page.view
<p class="zoneA">
  aaa
     
</p>
 
 
<p class="zoneB">
   
</p>
 
 
<p class="zoneC">
  ccc
</p>
Copier après la connexion

从结果可以看到,zoneB 的内容丢失,因为没有用 @show 告诉引擎输出这部分的内容,而 zoneC 的内容会显示两次,并且还破坏了 layout.master 的页面结构,因为 @show 出现了两次。

@append 和 @override

刚才说到了,@override 并不是在子模板中指明内容替换父模板的默认内容,而是另有用途,那么是如何使用呢?这又涉及到一个 section 在模板中可以多次使用的问题。也即我们所定义的每一个 section ,在随后的子模板中其实是可以多次出现的。比如:

代码如下:

{{-- master --}}
<p>
  @yield(&#39;content&#39;)
     
   
</p>
Copier après la connexion

代码如下:

{{-- subview --}}
@extends(&#39;master&#39;)
 
@section(&#39;content&#39;)
加一行内容
@append
 
@section(&#39;content&#39;)
再加一行内容
@append
 
@section(&#39;content&#39;)
加够了,到此为止吧。
@stop
Copier après la connexion

在上例中,我在父级模板中只定义了一个名为 "content" 的 section,而在子模板中三次指定了这个 section 的内容。 这个例子最终的输出是:

代码如下:

<p>
加一行内容
再加一行内容
加够了,到此为止吧。
</p>
Copier après la connexion

三次指定的内容都显示出来了,关键就在于 @append 这个关键字,它表明“此处的内容添加到”,因此内容会不断扩展。而最后用了 @stop,表示这个 section 的处理到此为止。如果在后面继续用 @append 或者 @stop 来指定这个 section 的内容,都不会生效。除非用 @override 来处理。 @override 的意思就是“覆盖之前的所有定义,以这次的为准”。比如:

代码如下:

{{-- master --}}
<p>
  @yield(&#39;content&#39;)
    @yield(&#39;message&#39;)
     
   
</p>
Copier après la connexion


代码如下:

{{-- master --}}
<p>
  @section(&#39;content&#39;)
    加一行内容
    @append
    @section(&#39;content&#39;)
    再加一行内容
    @append
    @section(&#39;content&#39;)
    加够了,结束吧
    @stop
    @section(&#39;content&#39;)
    都不要了,我说的。
    @override
     
   
</p>
Copier après la connexion

这个例子和刚才的类似,只不过最后加了一组定义。最终的输出会是:

代码如下:

<p>
  都不要了,我说的。
</p>
Copier après la connexion


所以,在正式的项目中,有时候需要对数据进行遍历输出的,可以使用 @append,而如果遍历到了某个数据发现前面的都错了呢?用 @override 就可以全部推翻。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Différence entre Centos et Ubuntu Différence entre Centos et Ubuntu Apr 14, 2025 pm 09:09 PM

Les principales différences entre Centos et Ubuntu sont: l'origine (Centos provient de Red Hat, pour les entreprises; Ubuntu provient de Debian, pour les particuliers), la gestion des packages (Centos utilise Yum, se concentrant sur la stabilité; Ubuntu utilise APT, pour une fréquence de mise à jour élevée), le cycle de support (CentOS fournit 10 ans de soutien, Ubuntu fournit un large soutien de LT tutoriels et documents), utilisations (Centos est biaisé vers les serveurs, Ubuntu convient aux serveurs et aux ordinateurs de bureau), d'autres différences incluent la simplicité de l'installation (Centos est mince)

Différence entre MongoDB et Redis Différence entre MongoDB et Redis Apr 12, 2025 am 07:36 AM

Les principales différences entre MongoDB et Redis sont: Modèle de données: MongoDB utilise un modèle de document, tandis que Redis utilise une paire de valeurs clés. Type de données: MongoDB prend en charge les structures de données complexes, tandis que Redis prend en charge les types de données de base. Langue de requête: MongoDB utilise un langage de requête de type SQL, tandis que Redis utilise un ensemble de commandes propriétaires. Transactions: MongoDB prend en charge les transactions, mais Redis ne le fait pas. Objectif: MongoDB convient pour stocker des données complexes et effectuer des requêtes associées, tandis que Redis convient aux applications de mise en cache et à haute performance. Architecture: MongoDB persiste les données sur le disque, et Redis les enregistre par défaut

Polyvylity de Laravel: des sites simples aux systèmes complexes Polyvylity de Laravel: des sites simples aux systèmes complexes Apr 13, 2025 am 12:13 AM

Le projet de développement de Laravel a été choisi en raison de sa flexibilité et de sa puissance pour répondre aux besoins de différentes tailles et complexités. Laravel fournit un système de routage, Eloquentorm, une ligne de commande artisanale et d'autres fonctions, soutenant le développement de blogs simples aux systèmes complexes au niveau de l'entreprise.

Fonction principale de Laravel: développement backend Fonction principale de Laravel: développement backend Apr 15, 2025 am 12:14 AM

Les fonctions principales de Laravel dans le développement back-end incluent le système de routage, l'éloquente, la fonction de migration, le système de cache et le système de file d'attente. 1. Le système de routage simplifie la cartographie de l'URL et améliore l'organisation et la maintenance du code. 2.Lesormorm fournit des opérations de données orientées objet pour améliorer l'efficacité du développement. 3. La fonction de migration gère la structure de la base de données via le contrôle de la version pour assurer la cohérence. 4. Le système de cache réduit les requêtes de la base de données et améliore la vitesse de réponse. 5. Le système de file d'attente traite efficacement les données à grande échelle, évite de bloquer les demandes des utilisateurs et d'améliorer les performances globales.

Quelle est la différence entre Oracle et MySQL Quelle est la différence entre Oracle et MySQL Apr 11, 2025 pm 06:18 PM

Oracle et MySQL sont deux principaux SGBDR, Oracle est un logiciel commercial et MySQL est un logiciel open source. Oracle adopte une architecture multi-processus, avec de meilleures performances, une meilleure évolutivité, mais un coût plus élevé. MySQL adopte une architecture multi-thread, qui a des performances de coûts plus élevées et des types de données plus flexibles, mais sa haute disponibilité et sa sécurité ne sont pas aussi bonnes qu'Oracle. Par conséquent, Oracle convient aux applications d'entreprise critique de mission, et MySQL convient plus aux applications de petite à moyenne taille.

MongoDB Start rapide: de l'installation aux opérations de base MongoDB Start rapide: de l'installation aux opérations de base Apr 12, 2025 am 06:27 AM

Cet article présente le moyen rapide de commencer avec MongoDB. 1. Installez MongoDB: Téléchargez le package d'installation de version correspondante et exécutez le programme d'installation pour démarrer le service MongoDB; 2. Opérations de base: utilisez le pilote Pymongo pour effectuer des opérations CRUD (insérer, requérir, mettre à jour, supprimer), faites attention à la connexion et à la fermeture de la base de données; 3. Optimisation des performances: Concevoir raisonnablement la structure de la base de données et sélectionner les stratégies d'indexation appropriées basées sur des conditions réelles pour éviter les index excessifs. En maîtrisant ces étapes, vous pouvez rapidement commencer avec MongoDB.

L'importance de Debian Sniffer dans la surveillance du réseau L'importance de Debian Sniffer dans la surveillance du réseau Apr 12, 2025 pm 11:03 PM

Bien que les résultats de la recherche ne mentionnent pas directement "Debiansniffer" et son application spécifique dans la surveillance du réseau, nous pouvons en déduire que "Sniffer" se réfère à un outil d'analyse de capture de paquets de réseau, et son application dans le système Debian n'est pas essentiellement différente des autres distributions Linux. La surveillance du réseau est cruciale pour maintenir la stabilité du réseau et l'optimisation des performances, et les outils d'analyse de capture de paquets jouent un rôle clé. Ce qui suit explique le rôle important des outils de surveillance du réseau (tels que Sniffer Running dans Debian Systems): La valeur des outils de surveillance du réseau: Faute-défaut Emplacement: surveillance en temps réel des métriques du réseau, telles que l'utilisation de la bande passante, la latence, le taux de perte de paquets, etc.

Comment afficher le statut de pare-feu à Centos Comment afficher le statut de pare-feu à Centos Apr 14, 2025 pm 08:18 PM

Le pare-feu de l'état du Centos peut être visualisé via la commande sud-foyer-CMD - State, revenant à l'exécution ou à ne pas s'exécuter. Pour des informations plus détaillées, vous pouvez utiliser le pare-feu sudo-cmd - list-tout pour afficher, y compris les zones configurées, les services, les ports, etc. Si le pare-feu-CMD ne résout pas le problème, vous pouvez utiliser les Iptables sudo -l -L -N pour afficher les règles iptables. Assurez-vous de faire une sauvegarde avant de modifier la configuration du pare-feu pour assurer la sécurité du serveur.

See all articles