보다
ㅋㅋ > 모든 보기와 데이터 공유
- 여러 뷰에 뷰 합성기 추가
<!-- 此视图文件位置 resources/views/greeting.blade.php --> <html> <body> <h1>Hello, {{ $name }}</h1> </body> </html>
该视图文件位于 resources/views/greeting.blade.php
,可以使用全局辅助函数 view
来返回:
Route::get('/', function () { return view('greeting', ['name' => 'James']); });
如您所见,传递给 view
帮助器的第一个参数对应于 resources/views
目录中视图文件的名称。 第二个参数是应该可供视图使用的数据数组。 在这种情况下,我们传递 name
变量,该变量使用 Blade syntax 显示在视图中。
当然,视图文件也可以嵌套在 resources/views
目录的子目录中。「点」符号可以用来引用嵌套视图。例如,如果你的视图存储在 resources/views/admin/profile.blade.php
,则可以这样引用它:
return view('admin.profile', $data);
判断视图文件是否存在
如果需要判断视图文件是否存在,可以使用 View
facade. 如果视图文件存在,exists
方法会返回 true
:
use Illuminate\Support\Facades\View;if (View::exists('emails.customer')) { // }
创建第一个可用视图
使用 first
方法,你可以创建存在于给定数组视图中的第一个视图。 如果你的应用程序或开发的第三方包允许定制或覆盖视图,这非常有用:
return view()->first(['custom.admin', 'admin'], $data);
当然,你也可以通过 View
facade 调用这个方法:
use Illuminate\Support\Facades\View;return View::first(['custom.admin', 'admin'], $data);
向视图传递参数
正如您在前面的示例中所看到的,您可以将一组数据传递给视图:
return view('greetings', ['name' => 'Victoria']);
以这种方式传递信息时,数据应该是具有键 / 值对的数组。 在视图中,您可以使用相应的键访问每个值,例如 <?php echo $key; ?>
。 作为将完整的数据数组传递给 view
辅助函数的替代方法,您可以使用 with
方法将各个数据片段添加到视图中:
return view('greeting')->with('name', 'Victoria');
与所有视图共享数据
如果需要共享一段数据给应用程序的所有视图,你可以在服务提供器的 boot
方法中调用视图 Facade 的 share
方法。例如,可以将它们添加到 AppServiceProvider
<?php namespace App\Providers; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider{ /** * Bootstrap any application services. * * @return void */ public function boot() { View::share('key', 'value'); } /** * Register the service provider. * * @return void */ public function register() { // } }보기 파일은
resources/views/greeting.blade.php
에 있으며 전역 도우미 함수 view
를 사용하여 반환될 수 있습니다. <?php namespace App\Providers; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class ViewServiceProvider extends ServiceProvider{ /** * Register bindings in the container. * * @return void */ public function boot() { // Using class based composers... View::composer( 'profile', 'App\Http\View\Composers\ProfileComposer' ); // Using Closure based composers... View::composer('dashboard', function ($view) { // }); } /** * Register the service provider. * * @return void */ public function register() { // } }보시다시피
view
도우미에 전달된 첫 번째 매개변수는 resources/views
디렉터리에 있는 보기 파일의 이름에 해당합니다. 두 번째 매개변수는 뷰에서 사용할 수 있는 데이터 배열입니다. 이 경우 블레이드 구문을 사용하여 뷰에 표시되는 name
변수를 전달합니다. 물론, 보기 파일은 resources/views
디렉터리의 하위 디렉터리에 중첩될 수도 있습니다. 중첩된 뷰를 참조하는 데 "점" 표기법을 사용할 수 있습니다. 예를 들어, 뷰가 resources/views/admin/profile.blade.php
에 저장된 경우 다음과 같이 참조할 수 있습니다. <?php namespace App\Http\View\Composers; use Illuminate\View\View; use App\Repositories\UserRepository; class ProfileComposer{ /** * The user repository implementation. * * @var UserRepository */ protected $users; /** * Create a new profile composer. * * @param UserRepository $users * @return void */ public function __construct(UserRepository $users) { // Dependencies automatically resolved by service container... $this->users = $users; } /** * Bind data to the view. * * @param View $view * @return void */ public function compose(View $view) { $view->with('count', $this->users->count()); } }
뷰 파일이 존재하는지 확인
🎜뷰 파일이 존재하는지 확인해야 하는 경우View
파사드를 사용할 수 있습니다. 뷰 파일이 존재하는 경우 < code>exists 메소드는 true
를 반환합니다: 🎜View::composer( ['profile', 'dashboard'], 'App\Http\View\Composers\MyViewComposer' );
사용 가능한 첫 번째 보기 만들기
🎜first
메소드를 사용하면 주어진 배열 뷰에 존재하는 첫 번째 뷰를 생성할 수 있습니다. 이는 애플리케이션이나 개발된 타사 패키지에서 뷰를 사용자 정의하거나 재정의할 수 있는 경우 유용합니다. 🎜View::composer('*', function ($view) { // });🎜 물론
View
파사드를 통해 이 메서드를 호출할 수도 있습니다. 🎜View::creator('profile', 'App\Http\View\Creators\ProfileCreator');🎜🎜🎜
<?php echo $key ?>
). 전체 데이터 배열을 view
도우미 함수에 전달하는 대신 with
메서드를 사용하여 개별 데이터 조각을 뷰에 추가할 수 있습니다. 🎜rrreee🎜🎜🎜모든 보기와 데이터 공유
🎜공유해야 하는 경우 프로그램의 모든 뷰에 대해 서비스 제공자의boot
메소드에서 뷰 Facade의 share
메소드를 호출할 수 있습니다. 예를 들어 AppServiceProvider
에 추가하거나 별도의 서비스 공급자를 생성할 수 있습니다. 🎜rrreee🎜🎜🎜🎜🎜🎜View Composers
View compositor는 뷰가 렌더링될 때 호출되는 콜백 또는 클래스 메서드입니다. 데이터가 렌더링될 때마다 뷰에 바인딩하려는 경우 뷰 작성기가 해당 논리를 한 곳에 정리하는 데 도움이 될 수 있습니다.
다음 예에서는 서비스 제공자에 뷰 컴포지터를 등록해 보겠습니다. 기본 IlluminateContractsViewFactory
계약 구현에 액세스하려면 View
파사드를 사용하세요. 기본적으로 Laravel에는 뷰 컴포저를 저장할 디렉터리가 없습니다. 필요에 따라 디렉터리를 다시 만들어야 합니다. 예: app/Http/View/Composers
:View
facade 来访问底层的 IlluminateContractsViewFactory
契约实现。默认情况下,Laravel 没有存放视图合成器的目录,你需要根据需求来重新建立目录,例如: app/Http/View/Composers
:
{note} 注意,如果你创建了新的一个服务提供器来存放你注册视图合成器的代码,那么你需要将这个服务提供器添加到配置文件
config/app.php
的providers
数组中。
到此我们已经注册了视图合成器,每次渲染 profile
视图时都会执行 ProfileComposer@compose
方法。那么下面我们来定义视图合成器的这个类吧:
视图合成器的 compose
方法会在视图渲染之前被调用,并传入一个 IlluminateViewView
实例。你可以使用 with
方法将数据绑定到视图。
{tip} 所有的视图合成器都会通过 服务容器 , 进行解析,所以你可以在视图合成器的构造函数中类型提示需要注入的依赖项。
将视图合成器添加到多个视图
通过将一组视图作为第一个参数传入 composer
方法,将一个视图合成器添加到多个视图:
composer
方法同时也接受通配符 *
,表示将一个视图合成器添加到所有视图:
视图构造器
视图 creators 和视图合成器非常相似。唯一不同之处在于:视图构造器在视图实例化之后立即执行,而视图合成器在视图即将渲染时执行。使用 creator
rrreee
{note} 참고, 뷰 컴포저 등록을 위한 코드를 저장하기 위해 새로운 서비스 제공자를 생성하는 경우 이 서비스 제공자를 config/app.php 구성 파일의 providers<에 추가해야 합니다.
/code> 배열. 이제 뷰 컴포저를 등록했으며 profile
뷰가 렌더링될 때마다 ProfileComposer@compose
메서드가 실행됩니다. 그러면 뷰 컴포저의 이 클래스를 정의해 보겠습니다. rrreee뷰 컴포저의 compose
메서드는 뷰가 렌더링되기 전에 호출되고 IlluminateViewView
인스턴스가 전달됩니다. 안에 . with
메서드를 사용하여 데이터를 뷰에 바인딩할 수 있습니다.
🎜{tip} 모든 뷰 작곡가는 서비스 컨테이너를 통해 해결되므로 뷰 작곡가의 생성자에 주입해야 하는 종속성을 유형 힌트로 지정할 수 있습니다. 🎜
여러 뷰에 뷰 합성기 추가
🎜첫 번째 인수로 뷰 배열을 전달하여 Composer
메소드는 여러 뷰에 뷰 작곡가를 추가합니다. 🎜rrreee🎜composer
메소드는 와일드카드 문자 *
도 허용합니다. 이는 모든 뷰에 추가된 뷰 합성기를 의미합니다. 🎜rrreee뷰 생성자
🎜Viewcreators와 뷰 합성자는 매우 유사합니다. 유일한 차이점은 뷰 생성자는 뷰가 인스턴스화된 직후에 실행되는 반면, 뷰 합성기는 뷰가 렌더링되려고 할 때 실행된다는 것입니다.creator
메소드를 사용하여 뷰 생성자를 등록하세요: 🎜rrreee🎜이 글은 🎜LearnKu.com🎜 웹사이트에 처음 게시되었습니다. 🎜🎜