pandangan
- Buat paparan pertama yang tersedia
- Tambahkan penggubah paparan pada berbilang paparan
Mencipta Pandangan
{tip} Jika anda ingin mengetahui lebih lanjut tentang cara menulis templat Blade? Mulakan dengan menyemak dokumentasi Blade yang lengkap.
Paparan mengandungi HTML aplikasi dan asingkan pengawal/logik aplikasi daripada logik pembentangan. Lihat fail disimpan dalam direktori resources/views
. Paparan ringkas kelihatan seperti ini: resources/views
目录下。一个简单的视图如下所示:
<!-- 此视图文件位置 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() { // } }Fail paparan terletak di
resources/views/greeting.blade.php
dan boleh dikembalikan menggunakan fungsi pembantu global 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() { // } }Seperti yang anda boleh lihat, parameter pertama yang dihantar ke pembantu
view
sepadan dengan nama fail paparan dalam direktori resources/views
. Parameter kedua ialah tatasusunan data yang sepatutnya tersedia untuk paparan. Dalam kes ini, kami menghantar pembolehubah name
, yang dipaparkan dalam paparan menggunakan sintaks Blade. Sudah tentu, fail lihat juga boleh bersarang dalam subdirektori direktori sumber/paparan
. Notasi "titik" boleh digunakan untuk merujuk kepada paparan bersarang. Contohnya, jika paparan anda disimpan dalam resources/views/admin/profile.blade.php
, anda boleh merujuknya seperti ini: <?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()); } }
Tentukan sama ada fail paparan wujud
🎜Jika anda perlu menentukan sama ada fail paparan wujud, anda boleh menggunakan fasadView
. Jika fail paparan wujud, < kaedah kod>wujud akan mengembalikan true
: 🎜View::composer( ['profile', 'dashboard'], 'App\Http\View\Composers\MyViewComposer' );
Buat paparan pertama yang tersedia
🎜 Gunakan kaedahfirst
, anda boleh mencipta paparan pertama yang wujud dalam paparan tatasusunan yang diberikan. Ini berguna jika aplikasi anda atau pakej pihak ketiga yang dibangunkan membenarkan menyesuaikan atau mengatasi paparan: 🎜View::composer('*', function ($view) { // });🎜 Sudah tentu, anda juga boleh memanggil kaedah ini melalui fasad
View
: 🎜View::creator('profile', 'App\Http\View\Creators\ProfileCreator');🎜🎜🎜
<?php echo $key ?>
. Sebagai alternatif untuk menghantar tatasusunan data lengkap ke fungsi pembantu view
, anda boleh menggunakan kaedah with
untuk menambah serpihan data individu pada paparan: 🎜rrreee🎜🎜🎜Berkongsi data dengan semua paparan
🎜Jika anda perlu berkongsi sekeping data ke aplikasi Untuk semua paparan program, anda boleh memanggil kaedahkongsi
Facade paparan dalam kaedah boot
pembekal perkhidmatan. Contohnya, anda boleh menambahkannya pada AppServiceProvider
atau menjana pembekal perkhidmatan yang berasingan untuk mereka: 🎜rrreee🎜🎜🎜🎜🎜🎜Lihat Komposer
Lihat penggubah ialah panggilan balik atau kaedah kelas yang dipanggil apabila paparan dipaparkan. Jika anda ingin mengikat data pada paparan setiap kali ia dipaparkan, komposer paparan boleh membantu anda menyusun logik itu ke satu tempat.
Dalam contoh berikut, kami akan mendaftarkan komposer paparan dengan pembekal perkhidmatan. Gunakan fasad View
untuk mengakses pelaksanaan kontrak IlluminateContractsViewFactory
yang mendasari. Secara lalai, Laravel tidak mempunyai direktori untuk menyimpan komposer paparan Anda perlu mencipta semula direktori mengikut keperluan anda, contohnya: 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
{nota} Nota, Jika anda membuat penyedia perkhidmatan baharu untuk menyimpan kod anda untuk mendaftarkan komposer paparan, maka anda perlu menambah penyedia perkhidmatan ini pada pembekal< fail konfigurasi config/app.php
/code> tatasusunan. Kaedah karang
komposer paparan akan dipanggil sebelum paparan dipaparkan dan lulus dalam contoh IlluminateView
. Anda boleh mengikat data pada paparan menggunakan kaedah with
.
🎜{tip} Semua komposer paparan akan diselesaikan melalui bekas perkhidmatan, jadi anda boleh menaip-petunjuk kebergantungan yang perlu disuntik dalam pembina komposer paparan. 🎜
Tambahkan penggubah paparan pada berbilang paparan
🎜Dengan menghantar tatasusunan pandangan sebagai argumen pertamacomposer
juga menerima aksara kad bebas *
, yang bermaksud menambah paparan Compositors ditambahkan pada semua paparan: 🎜rrreeeLihat pembina
🎜Lihatpencipta dan lihat penggubah adalah sangat serupa. Satu-satunya perbezaan adalah bahawa pembina paparan dilaksanakan serta-merta selepas paparan diwujudkan, manakala penggubah paparan dilaksanakan apabila paparan akan diberikan. Gunakan kaedahcreator
untuk mendaftarkan pembina paparan: 🎜rrreee🎜Artikel ini pertama kali diterbitkan di tapak web 🎜LearnKu.com🎜. 🎜🎜