Pernahkah Anda membuat pengontrol di mana Anda harus melakukan banyak pekerjaan untuk menyiapkan variabel untuk diteruskan ke tampilan? Anda dapat memindahkan pekerjaan semacam itu ke model tampilan yang disebut. Intinya, model tampilan adalah kelas sederhana yang mengambil sejumlah data, dan mengubahnya menjadi sesuatu yang dapat digunakan untuk tampilan tersebut.
Anda akan menemukan penjelasan lebih detail dan beberapa contoh bagus di postingan blog ini di Stitcher.io.
Komposer tampilan asli Laravel tidak sama dengan model tampilan yang disediakan oleh paket ini. Untuk mempelajari lebih lanjut tentang perbedaannya, kunjungi postingan blog ini di Stitcher.io.
Kami menginvestasikan banyak sumber daya untuk menciptakan paket sumber terbuka terbaik di kelasnya. Anda dapat mendukung kami dengan membeli salah satu produk berbayar kami.
Kami sangat menghargai Anda mengirimi kami kartu pos dari kota asal Anda, yang menyebutkan paket kami mana yang Anda gunakan. Anda akan menemukan alamat kami di halaman kontak kami. Kami mempublikasikan semua kartu pos yang diterima di dinding kartu pos virtual kami.
Anda dapat menginstal paket melalui composer:
composer require spatie/laravel-view-models
Model tampilan adalah kelas tempat Anda dapat memasukkan logika kompleks untuk tampilan Anda. Ini akan membuat pengontrol Anda sedikit lebih ringan. Anda dapat membuat model tampilan dengan memperluas SpatieViewModelsViewModel
yang disediakan.
class PostViewModel extends ViewModel
{
public $ user ;
public $ post ;
public $ indexUrl = null ;
public function __construct ( User $ user , Post $ post = null )
{
$ this -> user = $ user ;
$ this -> post = $ post ;
$ this -> indexUrl = action ([PostsController::class, ' index ' ]);
}
public function post (): Post
{
return $ this -> post ?? new Post ();
}
public function categories (): Collection
{
return Category:: canBeUsedBy ( $ this -> user )-> get ();
}
}
Kemudian Anda bisa menggunakan kelas model tampilan di pengontrol Anda seperti ini:
class PostsController
{
public function create ()
{
$ viewModel = new PostViewModel (
current_user ()
);
return view ( ' blog.form ' , $ viewModel );
}
public function edit ( Post $ post )
{
$ viewModel = new PostViewModel (
current_user (),
$ post
);
return view ( ' blog.form ' , $ viewModel );
}
}
Dalam tampilan Anda dapat melakukan ini:
< input type = " text " value = " {{ $post -> title } } " />
< input type = " text " value = " {{ $post -> body } } " />
< select >
@foreach ( $categories as $category )
< option value = " {{ $category -> id } } " > {{ $category -> name } } </ option >
@endforeach
</ select >
< a href = " {{ $indexUrl } } " >Back</ a >
Semua metode dan properti publik dalam model tampilan secara otomatis diekspos ke tampilan. Jika Anda tidak ingin metode tertentu tersedia dalam tampilan Anda, Anda dapat mengabaikannya.
class PostViewModel extends ViewModel
{
protected $ ignore = [ ' ignoredMethod ' ];
/ / …
public function ignoredMethod () { / * … * / }
}
Semua metode ajaib bawaan PHP diabaikan secara otomatis.
Dimungkinkan untuk mengembalikan model tampilan secara langsung dari pengontrol. Secara default, respons JSON dengan data dikembalikan.
class PostsController
{
public function update ( Request $ request , Post $ post )
{
/ / …
return new PostViewModel ( $ post );
}
}
Pendekatan ini dapat berguna ketika bekerja dengan formulir yang dikirimkan AJAX.
Dimungkinkan juga untuk mengembalikan tampilan secara langsung:
class PostsController
{
public function update ( Request $ request , Post $ post )
{
/ / …
return ( new PostViewModel ( $ post ))-> view ( ' post.form ' );
}
}
Perhatikan bahwa ketika header Content-Type
permintaan diatur ke JSON, pendekatan ini juga akan mengembalikan data JSON, bukan tampilan yang dirender.
Model tampilan dapat menampilkan fungsi yang memerlukan parameter tambahan.
class PostViewModel extends ViewModel
{
public function formatDate ( Carbon $ date ): string
{
return $ date -> format ( ' Y-m-d ' );
}
}
Anda dapat menggunakan fungsi-fungsi ini dalam tampilan seperti ini:
{{ $ formatDate ( $post -> created_at ) } }
Paket tersebut menyertakan perintah artisan untuk membuat model tampilan baru.
php artisan make:view-model HomepageViewModel
Model tampilan ini akan memiliki namespace AppViewModels
dan akan disimpan di app/ViewModels
.
atau ke dalam namespace khusus, misalnya, AppBlog
php artisan make:view-model " Blog/PostsViewModel "
Model tampilan ini akan memiliki namespace AppBlogViewModels
dan akan disimpan di app/Blog/ViewModels
.
Silakan lihat CHANGELOG untuk informasi lebih lanjut tentang apa yang berubah baru-baru ini.
Silakan lihat KONTRIBUSI untuk rinciannya.
Jika Anda menemukan bug terkait keamanan, silakan kirim email ke [email protected] alih-alih menggunakan pelacak masalah.
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.