1. 뷰 간 데이터 공유
단일 보기에서 지정된 데이터를 전달하는 것 외에도 모든 보기에서 동일한 데이터를 전달해야 하는 경우가 있습니다. 즉, 서로 다른 보기에서 데이터를 공유해야 하는 경우가 있습니다. 이를 달성하려면 뷰 팩토리의 share
메서드를 사용해야 합니다.
전역 도우미 함수 view
는 response
과 유사합니다. 매개변수가 전달되면 IlluminateViewView
인스턴스가 반환됩니다. 매개변수가 전달되지 않으면 IlluminateViewFactory
인스턴스가 반환됩니다. 따라서 서비스 제공자의 boot
메소드에서 다음 메소드를 사용하여 뷰 간에 데이터를 공유할 수 있습니다.
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { //视图间共享数据 view()->share('sitename','Laravel学院'); } /** * Register any application services. * * @return void */ public function register() { // } }
routes.php
에서는 두 가지 경로를 정의합니다.
Route::get('testViewHello',function(){ return view('hello'); }); Route::get('testViewHome',function(){ return view('home'); });
그런 다음 resources/views
디렉토리에 다음 내용으로 home.blade.php
보기 파일을 만듭니다.
{{$sitename}}首页
다른 hello.blade.php
보기 파일 만들기:
欢迎来到{{$sitename}}!
브라우저에서 http://laravel.app:8000/testViewHello
, http://laravel.app:8000/testViewHome
에 각각 접속하면 $sitename
의 값을 파싱할 수 있습니다.
2. 뷰 컴포저
뷰가 렌더링될 때마다 로그인된 사용자 정보와 같은 일부 특정 데이터를 뷰에 바인딩하고 싶은 경우가 있습니다. 공장. 이 메서드의 두 번째 콜백 매개변수는 컨트롤러 작업과 클로저 함수를 기반으로 하는 두 가지 메서드를 지원합니다.
단순화를 위해 여전히 AppServiceProvider
을 기반으로 하며 별도의 서비스 제공자를 생성하지 않습니다. 여기서는 클로저 매개변수를 전달합니다(컨트롤러 작업은 뷰 문서 참조).
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { //视图间共享数据 view()->share('sitename','Laravel学院'); //视图Composer view()->composer('hello',function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); }); } /** * Register any application services. * * @return void */ public function register() { // } }
수정 hello.blade.php
파일 보기:
{{$sitename}}에 오신 것을 환영합니다!
<h3>用户信息</h3> 用户名:{{$user['name']}}<br> 用户头像:{{$user['avatar']}}
http://laravel.app:8000/testViewHello
에 액세스하면 출력 내용은 다음과 같습니다.
欢迎来到Laravel学院! 用户信息 用户名:test 用户头像:/path/to/test.jpg
또한 여러 보기에 데이터를 전달할 수도 있습니다.
view()->composer(['hello','home'],function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); });
모든 보기(와일드카드 * 사용):
view()->composer('*',function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); });
이상은 Laravel 뷰와 View Composer 간의 데이터 공유에 대한 내용입니다. 이 글이 Laravel을 배우는 모든 분들께 도움이 되기를 바랍니다.