Laravel의 View 모듈에 대한 자세한 설명

巴扎黑
풀어 주다: 2023-03-16 10:14:01
원래의
2810명이 탐색했습니다.

이 글에서는 라라벨 학습 튜토리얼의 뷰 모듈에 대한 관련 정보를 주로 소개합니다. 뷰 모듈은 샘플 코드를 통해 아주 자세하게 소개되어 있어 공부나 업무에 필요한 모든 사람이 따라할 수 있는 학습 가치가 있습니다. 에디터와 함께 배워볼까요?

머리말

이 글은 주로 Laravel의 View 모듈에 대한 관련 정보를 소개하고 있으며 참고 및 학습을 위해 공유합니다. 아래에서는 자세한 소개를 살펴보겠습니다. .

이 글은 Laravel 5.4 버전의 라우팅 모듈 코드를 분석하고 작성한 내용을 바탕으로 작성되었습니다.

파일 구조

View 모듈의 파일 형식과 기능은 아래 그림과 같습니다.


시각적 프리젠테이션 중 대략적인 프로세스:

1. view() 메소드를 호출하여 뷰 프리젠테이션을 시작합니다.

2 먼저 뷰 파일을 찾습니다. 파일 이름에 네임스페이스(즉, :: 앞 부분)가 있으면 해당 네임스페이스에 해당하는 등록된 경로 배열을 사용하고, 그렇지 않으면 전역 경로 배열(IlluminateViewFileViewFinder 클래스의 경로 변수)을 사용하세요.

(2) 현재 경로, 파일 이름 및 접미사 이름(기본 순서는 블레이드.php, php, css)을 결합하여 파일이 존재하는지 확인합니다.


(3) 파일이 존재하지 않는 경우 예외가 보고됩니다. 해당 뷰 파일이 존재하지 않으면 해당 엔진이 접미사 이름을 기반으로 호출됩니다. 분석을 위해


3.Css 접미사인 경우, 핵심 호출 방법은


4입니다. php 접미사인 경우 php 엔진을 사용하고, 핵심 호출 방법은


ob_start();
include $__path;
ob_get_clean();
로그인 후 복사

5입니다. 블레이드 엔진;


이 엔진은 캐시 파일이 만료되지 않은 경우 캐시 파일을 직접 호출합니다. 그렇지 않으면 sha1(storage/framework/views 디렉터리에 있음)을 통해 캐시 파일을 다시 컴파일하고 생성합니다. ;


Blade 엔진 컴파일

블레이드 엔진은 수많은 정기적인 일치 및 교체를 통해 파일을 컴파일합니다.

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);
  }
 }
}
로그인 후 복사

블레이드는 먼저 token_get_all 함수를 사용하여 PHP 인터프리터에서 HTML(T_INLINE_HTML)로 간주하는 뷰 파일의 일부를 생성한 후 Comments, Extensions, Orders 및 Echos 부분을 순차적으로 정기적으로 교체합니다.


Comment 부분

핵심 코드는 다음과 같습니다. , 주석 기호 "{{-- --}}"로 묶인 코드를 빈 문자열로 바꿉니다.

preg_replace("/{{--(.*?)--}}/s", '', $value);
로그인 후 복사

확장 부분


확장 메서드를 통해 BladeCompiler에 사용자 정의 처리 콜백 함수를 추가합니다. 그리고 템플릿에 사용자 정의 처리 콜백 함수를 추가합니다. 콘텐츠는 사용자 정의된 텍스트 일치로 대체됩니다.
핵심 코드는 다음과 같이 IlluminateViewBladeCompiler 파일에 있습니다.

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

protected function compileExtensions($value) {
 foreach ($this->extensions as $compiler) {
  $value = call_user_func($compiler, $value, $this);
 }
 
 return $value;
}
로그인 후 복사

명령 교체


이 부분은 다음과 같습니다. @if와 같은 프레임워크와 함께 제공되는 지침을 결합하고 지시문을 전달합니다. 메서드 등록 지침은 텍스트 교체를 수행합니다. 프레임워크에서 제공하는 지침은 다음 10개 부분으로 구성됩니다.

ViewCompilersConcernsCompilesAuthorizations: 권한 확인

명령에는 @can, @cannot, @elsecan, @elsecannot, @endcan, @endcannot

  • ConcernsCompilesComponents: 구성 요소 및 슬롯과 관련됨
    지침에는 다음이 포함됩니다: @comComponent, @endcomComponent, @slot, @endslot

  • ConcernsCompilesConditionals: 판단 진술 관련
    지침에는 다음이 포함됩니다: @if, @unless, @else, @elseif, @endif, @endunless, @isset, @endisset, @hassection

  • ConcernsCompiles포함: 파일 삽입
    지침에는 다음이 포함됩니다: @each, @include, @includeif, @includewhen

  • ConcernsCompilesInjections: 서비스 주입
    명령에는 다음이 포함됩니다: @inject

  • ConcernsCompilesLayouts: 레이아웃 관련
    지침에는 @extends, @section, @parent, @yield, @show, @append, @overwrite, @stop, @endsection

  • ConcernsCompilesLoops: 루프 관련
    지침에는 다음이 포함됩니다: @forelse, @empty, @endforelse, @endempty, @for, @foreach, @break, @continue, @endfor, @endforeach, @while, @endwhile

  • ConcernsCompilesRawPhp: 기본 PHP 문과 관련됨
    명령에는 다음이 포함됩니다: @php, @endphp, @unset

  • ConcernsCompilesStacks: 스택 관련
    명령에는 @stack, @push, @endpush, @prepend, @endprepend

  • ConcernsCompilesTranslations: 현지화된 번역 관련
    지침은 다음과 같습니다: @lang, @endlang, @choice


  • Echo 교체

echo 출력은 {!! !!}, {{{ }}} ;
를 정기적으로 대체합니다.

{!! !!} 기본 HTML 태그의 값을 출력하는 데 사용되는 이스케이프되지 않은 문자를 출력합니다.

  • {{ }} 일반 출력, 삼항 연산자 대체 지원

  • {{{ }}} 이스케이프 문자 출력, 삼항 연산자 대체 지원: {{ $a ?: " 기본값" }}(또는 {{$a 또는 "기본값"}})은 {{ isset($a) ? $a : "기본값"}}

    로 대체되었습니다.
  • 위 내용은 Laravel의 View 모듈에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿