제가 Laravel로 작업한 최초 버전은 4.2였고 저는 아직도 Laravel의 열렬한 팬입니다. 물론 지난 몇 년간 많은 것을 배웠고 많은 문제와 어려움에 부딪혔지만, 라라벨이 앞으로 어떤 변화를 가져올지 여전히 기대됩니다.
Laravel이 제공하는 흥미로운 기능 중 하나는 뷰 확장 기능입니다. 제 생각에는 매우 강력한 뷰 확장을 사용하면 개발자가 전역 변수에서 템플릿으로 변수를 정확하게 전달할 수 있습니다.
보기 확장 프로그램을 사용하는 방법은 무엇입니까?
먼저 두 가지 유형의 뷰 확장, 즉 클래스 기반과 클로저 기반을 알아야 합니다.
<?php View::composer('profile', function ($view) { $view->with('user', ['...']); }); // 或者 View::composer('profile', 'App\Http\ViewComposers\ProfileComposer');
차이는 매우 분명합니다. 클로저는 사용하기 쉽고 설정하는 데 많은 노력이 필요하지 않지만 서비스 제공업체가 점점 더 부풀어오르게 됩니다.
반면, 클래스 기반 뷰 확장을 사용하면 디자인 원칙을 직접 분리할 수 있습니다. 또 다른 이점은 이 코드 조각을 분리하여 테스트할 수 있고 다른 개발자가 기존 코드를 더 쉽게 유지할 수 있다는 것입니다.
컴퓨터 과학에서 우려 사항 분리(SoC)는 컴퓨터 프로그램을 기능적 중복이 최소화되도록 여러 기능으로 나누는 프로세스입니다. 관심 사항은 프로그램에서 흥미로운 위치나 초점입니다. 초점은 기능이나 동작과 동의어인 경우가 많으며 SoC 발전은 전통적으로 모듈화 및 캡슐화를 통한 정보 은닉의 도움으로 달성되었습니다.
View::composer 메소드의 매개변수 이해하기
이 예에서는 View::composer 메소드에 두 개의 매개변수가 있는 것을 볼 수 있습니다.
<?php View::composer('profile', function ($view) { $view->with('user', ['...']); }); // 或者 View::composer('profile', 'App\Http\ViewComposers\ProfileComposer');
첫 번째 매개변수는 모니터링하려는 뷰의 이름으로, 문자열이나 배열일 수 있습니다. 즉, 이 템플릿 보기가 렌더링되면 보기 관리자가 트리거되고 변수가 보기에 전달됩니다.
모든 템플릿을 수동으로 선택하는 대신 와일드카드를 사용할 수도 있습니다. 별표(*)를 사용하여 모든 보기에 데이터를 추가할 수 있으며, 하위 디렉터리가 많은 복잡한 템플릿도 마찬가지입니다.
사용 시나리오는 일반적으로 각 보기에 표시되어야 하는 사이드바 또는 탐색 요소입니다.
<?php // 为一个视图添加合成器: ~/resources/views/profile View::composer('profile', ...); // 为多个视图添加: ~/resources/views/profile, ~/resources/views/profile_edit and ~/resources/views/profile_settings View::composer(['profile', 'profile_edit', 'profile_settings'], ...); // 目录通配符: all files in ~/resources/views/pages/* View::composer(['*pages.*'], ...);
두 번째 매개변수는 클로저 함수이거나 뷰 작곡가의 클래스 이름일 수 있습니다.
두 메소드 모두 $view 매개변수를 받습니다. 이 매개변수를 통해 ->with() 메소드를 쉽게 사용하여 뷰에 변수를 추가할 수 있습니다.
<?php View::composer('*', function ($view) { $view->with('breadcrumb', ['item 1', 'item ']); }); // 或者 View::composer('*', 'App\Http\ViewComposers\NavigationComposer'); // compose 方法也有 $view 参数 namespace App\Http\View\Composers; use Illuminate\View\View; class NavigationComposer { /** * @param View $view * @return void */ public function compose(View $view) { $view->with('navigation', [ 'items1', 'items2', 'item3' ]); } }
뷰 컴포지터 설정
Laravel이 많은 용도로 공급자를 사용한다는 사실을 알고 계시다면 다음 단계는 무엇인지 추측하실 수 있을까요? 네, 서비스 제공자를 등록해야 하고, 제공자 내에서 방금 배운 뷰 합성기를 사용하세요.
ViewComposerServiceProvider.php
<?php namespace App\Providers; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class ViewComposerServiceProvider extends ServiceProvider { public function boot() { View::composer( 'pages/*', 'App\Http\View\Composers\NavigationComposer' ); } /** * 注册服务提供者 * * @return void */ public function register() { // TODO: 实现 register() 方法。 } }
이제 남은 것은 ~/config/app.php에 새로운 서비스 제공자를 등록하는 것뿐입니다.
<?php return [ 'providers' => [ // .... /* * 应用的服务提供者... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\ViewComposerServiceProvider::class, // .... ], ];
그게 다입니다. 이제 뷰 합성기를 테스트할 수 있습니다.
뷰 편집기 테스트
배열 형식의 탐색 데이터가 필요한 /detail이라는 페이지가 있다고 가정해 보겠습니다(아래).
<?php namespace App\Http\View\Composers; use Illuminate\View\View; class NavigationComposer { /** * @param View $view * @return void */ public function compose(View $view) { $view->with('navigation', [ 'items1', 'items2', 'item3' ]); } }
->assertViewHas() 메소드를 통해 뷰 편집기를 테스트할 수 있습니다. 이 메소드는 뷰 편집기가 올바른 뷰를 수신하고 있는지 감지하고 $navigation 변수를 전달할 수 있습니다.
<?php class ViewComposerTest extends TestCase { /** * @return void */ public function testDetailHasNavigationItems() { $this->get('/detail')->assertViewHas('navigation'); } }
이 테스트가 간단해 보이지만 최소한 뷰 편집기가 작동하는지 알 수 있습니다.
결론
클로저 기반 또는 클래스 기반 뷰 관리자는 코드를 단순화하고 개발자가 더 쉽게 사용할 수 있도록 해줍니다. 이는 Laravel의 일부이기도 합니다. 이렇게 강력한 서비스를 사용해 보는 것은 어떨까요?
Laravel의 새로운 기능을 기대하고 있으며 새로운 것을 보여드릴 수 있기를 바랍니다.
추천 튜토리얼: "Laravel Tutorial"
위 내용은 Laravel 뷰 합성기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!