이 글에서는 라라벨 학습 튜토리얼의 뷰 모듈에 대한 관련 정보를 주로 소개합니다. 뷰 모듈은 샘플 코드를 통해 아주 자세하게 소개되어 있어 공부나 업무에 필요한 모든 사람이 따라할 수 있는 학습 가치가 있습니다. 에디터와 함께 배워볼까요?
머리말
이 글은 주로 Laravel의 View 모듈에 대한 관련 정보를 소개하고 있으며 참고 및 학습을 위해 공유합니다. 아래에서는 자세한 소개를 살펴보겠습니다. .
이 글은 Laravel 5.4 버전의 라우팅 모듈 코드를 분석하고 작성한 내용을 바탕으로 작성되었습니다.
파일 구조
View 모듈의 파일 형식과 기능은 아래 그림과 같습니다.
시각적 프리젠테이션 중 대략적인 프로세스:
1. view() 메소드를 호출하여 뷰 프리젠테이션을 시작합니다.
2 먼저 뷰 파일을 찾습니다. 파일 이름에 네임스페이스(즉, :: 앞 부분)가 있으면 해당 네임스페이스에 해당하는 등록된 경로 배열을 사용하고, 그렇지 않으면 전역 경로 배열(IlluminateViewFileViewFinder 클래스의 경로 변수)을 사용하세요.
ob_start(); include $__path; ob_get_clean();
이 엔진은 캐시 파일이 만료되지 않은 경우 캐시 파일을 직접 호출합니다. 그렇지 않으면 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개 부분으로 구성됩니다.
명령에는 @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 출력은 {!! !!}, {{{ }}} ;
를 정기적으로 대체합니다.
{{ }} 일반 출력, 삼항 연산자 대체 지원
{{{ }}} 이스케이프 문자 출력, 삼항 연산자 대체 지원: {{ $a ?: " 기본값" }}(또는 {{$a 또는 "기본값"}})은 {{ isset($a) ? $a : "기본값"}}
로 대체되었습니다.위 내용은 Laravel의 View 모듈에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!