Maison  >  Article  >  développement back-end  >  Explication détaillée du module View de Laravel

Explication détaillée du module View de Laravel

巴扎黑
巴扎黑original
2017-09-21 10:17:372810parcourir

Cet article vous présente principalement les informations pertinentes sur le module View du didacticiel d'apprentissage Laravel. Le module View est présenté de manière très détaillée à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de tous les amis qui en ont besoin. Apprenons avec l'éditeur ci-dessous.

Avant-propos

Cet article vous présente principalement les informations pertinentes sur le module View dans Laravel et les partage pour votre référence et votre étude. Mots suivants Pas grand chose à dire, jetons un œil à l'introduction détaillée.

Cet article est basé sur l'analyse et l'écriture du code du module de routage de la version Laravel 5.4

Structure des fichiers

Affichage La disposition des fichiers et les fonctions du module sont illustrées dans la figure ci-dessous :


Le processus approximatif de présentation visuelle :

1 , démarrez le rendu de la vue en appelant la méthode view()


2. Commencez par rechercher le fichier de vue


. (1) Parcourez le chemin dans l'ordre, si le nom de fichier Avec un espace de noms (c'est-à-dire la partie avant ::), utilisez le tableau de chemin enregistré correspondant à l'espace de noms, sinon utilisez le tableau de chemin global (variable paths dans la classe IlluminateViewFileViewFinder );


(2) Combinez le chemin actuel, le nom du fichier et le nom du suffixe (l'ordre par défaut est blade.php, php, css) pour déterminer si le fichier existe


(3) Si le fichier n'existe pas, une exception sera signalée : la vue correspondante Le fichier n'existe pas ; si le fichier existe, le moteur correspondant est appelé pour l'analyse selon le nom du suffixe

;


3. S'il s'agit d'un suffixe CSS, le moteur de fichiers est utilisé et la méthode d'appel principale est file_get_contents ;


4. S'il s'agit d'un suffixe php, utilisez le php. moteur. La méthode d'appel principale est



5 S'il s'agit d'un suffixe blade.php, utilisez le moteur blade ; 🎜>Ce moteur prendra l'initiative de mettre en cache. Si le fichier cache n'a pas expiré, le fichier cache sera appelé directement sinon, il sera recompilé et le fichier cache sera généré via sha1 (situé dans le stockage/framework/. répertoire de vues) (en bas) ;
ob_start();
include $__path;
ob_get_clean();


Compilation du moteur Blade

Le moteur Blade compile les fichiers via un grand nombre de mise en œuvre de correspondance régulière et de remplacement ;

Pendant le processus d'analyse, Blade utilisera d'abord la fonction token_get_all pour obtenir le code HTML (T_INLINE_HTML) dans le fichier de vue considéré. par la partie interpréteur PHP, puis effectuez le remplacement régulier des parties Commentaires, Extensions, Déclarations et Echos dans l'ordre


Partie Commentaire
protected $compilers = [ 
 'Comments', // 注释部分
 'Extensions', // 扩展部分
 'Statements', // 语句块 (@ 开头的指令)
 'Echos',  // 输出
];

protected function parseToken($token) {
 list($id, $content) = $token;
 
 if ($id == T_INLINE_HTML) {
  foreach ($this->compilers as $type) {
   $content = $this->{"compile{$type}"}($content);
  }
 }
}

Le code principal ; est le suivant, remplacez le symbole de commentaire "{{ -- --}}" le code enveloppé est remplacé par une chaîne vide

Partie d'extension ;

preg_replace("/{{--(.*?)--}}/s", '', $value);

Ajoutez une fonction de rappel de traitement personnalisée à BladeCompiler via la méthode extend et effectuez une correspondance et un remplacement de texte personnalisés sur le contenu du modèle
Le code principal se trouve dans IlluminateViewBladeCompiler ; fichier, comme suit :

Remplacement des instructions

// 自定义的文本替换扩展 数组
protected $extensions = [];

protected function compileExtensions($value) {
 foreach ($this->extensions as $compiler) {
  $value = call_user_func($compiler, $value, $this);
 }
 
 return $value;
}

Cette partie est destinée à remplacer le texte des instructions qui viennent avec le framework comme @if et les instructions enregistrées via la méthode directive ; Les instructions fournies par le framework comportent les dix parties suivantes :

ViewCompilersConcernsCompilesAuthorizations : Permission vérifier

Les commandes incluent : @can, @cannot, @elsecan, @elsecannot, @endcan, @endcannot

  • ConcernsCompilesComponents : liés aux composants et aux emplacements
    Les instructions incluent : @component, @endcomponent, @slot, @endslot

  • ConcernsCompilesConditionals : liés aux déclarations de jugement
    Les instructions incluent : @if, @unless, @else, @elseif, @endif, @endunless, @isset, @endisset, @hassection

  • ConcernsCompilesIncludes : fichier intégré
    Les instructions incluent : @each, @include, @includeif, @includewhen

  • ConcernsCompilesInjections : Service Injection
    Les instructions incluent : @inject

  • ConcernsCompilesLayouts : lié à la mise en page
    Les instructions incluent : @extends, @section, @parent, @yield, @show, @append, @overwrite, @stop, @endsection

  • ConcernsCompilesLoops : liées aux boucles
    Les instructions incluent : @forelse, @empty, @endforelse, @endempty, @for, @foreach, @break, @continue, @endfor, @endforeach, @while, @endwhile

  • ConcernsCompilesRawPhp : lié aux instructions PHP natives
    Les commandes incluent : @php, @endphp, @unset

  • ConcernsCompilesStacks : liés à la pile
    Les commandes incluent : @stack, @push, @endpush, @prepend, @endprepend

  • ConcernsCompilesTranslations : liées à la traduction de localisation
    Les instructions incluent : @lang, @endlang, @choice


  • Echo remplace

la sortie d'écho est pour { !!} , {{ }}, {{{ }}} pour un remplacement régulier

{ !!} génère des caractères non échappés, utilisés pour afficher la valeur des balises HTML natives

 ;

  • {{ }} génère normalement et prend en charge le remplacement de l'opérateur ternaire ;

  • {{{ }}} génère des caractères d'échappement et prend en charge le remplacement de l'opérateur ternaire

  • Le remplacement de l'opérateur ternaire fait référence à : {{ $a ?: "Valeur par défaut" }} (ou {{$a ou "Valeur par défaut"}}) Le remplacement devient {{ isset($ a) ? $a : "Valeur par défaut"}}

    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!

    Déclaration:
    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