Saya ingin memiliki beberapa data default yang dapat diakses di semua tampilan di aplikasi Laravel 5 saya.
Saya telah mencoba mencarinya tetapi hanya menemukan hasil untuk Laravel 4. Saya telah membaca dokumentasi 'Berbagi Data Dengan Semua Tampilan' di sini tetapi saya tidak dapat memahami apa yang harus dilakukan. Di mana kode berikut harus ditempatkan?
View::share('data', [1, 2, 3]);
Terima kasih atas bantuan Anda.
*
on view terutama jika menggunakan query db, karena dijalankan untuk setiap sub view, komponen, dll, sehingga Anda bisa saja menjalankan ratusan query yang tidak perlu, hal terbaik adalah menggunakan tampilan dasar misalnya layout. aplikasi kemudian meneruskan data sesuai kebutuhan.Jawaban:
Target ini dapat dicapai melalui metode yang berbeda,
1. Menggunakan BaseController
Cara saya suka mengatur sesuatu, saya membuat
BaseController
kelas yang memperluas milik LaravelController
, dan mengatur berbagai hal global di sana. Semua pengontrol lain kemudian diperluas dariBaseController
alih-alih Pengontrol Laravel.2. Menggunakan Filter
Jika Anda mengetahui fakta bahwa Anda menginginkan sesuatu yang diatur untuk tampilan pada setiap permintaan di seluruh aplikasi, Anda juga dapat melakukannya melalui filter yang berjalan sebelum permintaan - inilah cara saya menangani objek Pengguna di Laravel.
ATAU
Anda dapat menentukan filter Anda sendiri
dan menyebutnya melalui panggilan filter sederhana.
Perbarui Menurut Versi 5. *
3. Menggunakan Middleware
Menggunakan
View::share
denganmiddleware
4. Menggunakan View Composer
View Composer juga membantu mengikat data tertentu untuk dilihat dengan cara yang berbeda. Anda dapat langsung mengikat variabel ke tampilan tertentu atau ke semua tampilan. Sebagai Contoh, Anda dapat membuat direktori Anda sendiri untuk menyimpan file penulis tampilan Anda sesuai dengan kebutuhan. dan file penulis tampilan ini melalui Layanan menyediakan interaksi dengan tampilan.
Metode tampilan komposer dapat menggunakan cara yang berbeda, Contoh pertama dapat terlihat sama:
Anda bisa membuat
App\Http\ViewComposers
direktori.Penyedia layanan
Setelah itu, tambahkan provider ini ke config / app.php di bawah bagian "provider".
TestViewComposer
ViewName.blade.php
Metode ini dapat membantu hanya untuk Tampilan tertentu. Tetapi jika Anda ingin memicu ViewComposer ke semua tampilan, kita harus menerapkan perubahan tunggal ini ke ServiceProvider.
Referensi
Dokumentasi Laravel
Untuk Klarifikasi Lebih Lanjut Episode Laracast
Jika masih ada sesuatu yang tidak jelas dari sisi saya, beri tahu saya.
sumber
register()
metode - ini bukan opsional*
. Jika Anda tidak menggunakan*
maka Anda akan baik-baik saja.Anda dapat membuat penyedia layanan Anda sendiri (
ViewServiceProvider
namanya biasa) atau menggunakan yang sudah adaAppServiceProvider
.Di penyedia yang Anda pilih, masukkan kode Anda ke dalam metode boot.
Ini akan membuat
$data
variabel dapat diakses di semua tampilan Anda.Jika Anda lebih suka menggunakan fasad daripada helper, ubah
view()->
keView::
tetapi jangan lupa untuk memilikiuse View;
di bagian atas file Anda.sumber
AppServiceProvider
masalah, tetapi jika Anda memiliki sesuatu yang lebih dari itu, Anda harus mempertimbangkan untuk membuat penyedia baru.composer update
juga tidak berfungsi. Sebenarnya itu tidak menembakboot()
sama sekali. Saya perlu membagi dua variabel.Saya menemukan ini sebagai yang termudah. Buat penyedia baru dan
'*'
gunakan karakter pengganti untuk melampirkannya ke semua tampilan. Bekerja di 5.3 juga :-)sumber
Cara terbaik adalah membagikan variabel menggunakan
View::share('var', $value);
Masalah dengan menulis menggunakan
"*"
:Pertimbangkan pendekatan berikut:
Dari contoh tampilan pisau:
Apa yang terjadi?
GlobalComposer
kelas instantiated 1000 kali menggunakanApp::make
.composing:some_partial_view_to_display_i
tersebut ditangani 1000 kali.compose
fungsi di dalamGlobalComposer
kelas disebut 1000 kali.Namun tampilan parsial
some_partial_view_to_display_i
tidak ada hubungannya dengan variabel yang disusun olehGlobalComposer
tetapi sangat meningkatkan waktu render.Pendekatan terbaik?
Menggunakan
View::share
bersama middleware yang dikelompokkan.Memperbarui
Jika Anda menggunakan sesuatu yang dihitung melalui pipeline middleware, Anda dapat dengan mudah mendengarkan acara yang sesuai atau meletakkan middleware view share di bagian bawah terakhir pipeline.
sumber
Dalam dokumentasi:
Saya setuju dengan Marwelln, cukup masukkan ke dalam
AppServiceProvider
fungsi boot:Saya merekomendasikan menggunakan nama tertentu untuk variabel, untuk menghindari kebingungan atau kesalahan dengan variabel lain yang tidak 'global'.
sumber
Dokumentasi didengarkan https://laravel.com/docs/5.4/views#view-composers tetapi saya akan memecahnya
Cari aplikasi direktori \ Providers di direktori root aplikasi Anda dan buat file ComposerServiceProvider.php dan salin dan tempel teks di bawah ini ke dalamnya dan simpan.
Dari root aplikasi Anda, buka Config / app.php dan cari bagian Providers di file tersebut dan salin dan tempel 'App \ Providers \ ComposerServiceProvider' ini, ke array.
Dengan melakukan ini, kami telah membuat Penyedia Layanan Komposer. Saat Anda menjalankan aplikasi dengan tampilan Profil seperti http: // domainanda / sesuatu / profil , penyedia layanan ComposerServiceProvider dipanggil dan kelas App \ Http \ ViewComposers \ ProfileComposer dibuat memanggil metode Composer karena kode di bawah ini di dalam metode atau fungsi boot.
Buka aplikasi jalur direktori / Http
Buat direktori bernama ViewComposers
Buat file ProfileComposer.php .
Sekarang masuk ke tampilan Anda atau dalam hal ini Profile.blade.php dan tambahkan
dan itu akan menunjukkan jumlah pengguna di halaman profil.
Untuk menunjukkan hitungan di semua halaman berubah
Untuk
sumber
Saya pikir cara terbaik adalah dengan
View Composers
. Jika seseorang datang ke sini dan ingin menemukan bagaimana melakukannya dengan cara View Composers, baca jawaban saya => Bagaimana cara membagikan variabel ke semua tampilan?sumber
Dokumentasi ada di sini https://laravel.com/docs/5.4/views#view-composers tetapi saya akan memecahnya 1. Cari penyedia direktori di direktori root Anda dan buat untuk ComposerServiceProvider.php dengan konten
sumber
Di dalam folder config Anda, Anda dapat membuat nama file php misalnya "variable.php" dengan konten di bawah ini:
Sekarang di dalam semua tampilan Anda bisa menggunakannya seperti
sumber
1) Di (app \ Providers \ AppServiceProvider.php)
2) dalam Model Pengguna Anda
3) dalam Pandangan Anda
sumber
Metode Laravel 5.6: https://laravel.com/docs/5.6/views#passing-data-to-views
Contoh, dengan berbagi koleksi model ke semua tampilan (AppServiceProvider.php):
sumber
Anda memiliki dua pilihan:
1. Bagikan melalui fungsi Boot di App \ Providers \ AppServiceProvider
public function boot() { view()->share('key', 'value'); }
Dan akses variabel $ key di file tampilan mana pun.
Catatan: Ingatlah bahwa Anda tidak dapat mengakses data Sesi, Auth, Rute saat ini di sini. Opsi ini bagus hanya jika Anda ingin berbagi data statis. Misalkan Anda ingin membagikan beberapa data berdasarkan pengguna saat ini, rute, atau variabel sesi khusus apa pun yang tidak dapat Anda lakukan dengan ini.
'aliases' => [ ..., 'Helper' => App\HelperClass\Helper::class, ],
dan buat Helper.php di folder HelperClass di dalam folder App
dan mengaksesnya di mana saja
Helper::Sample()
Anda tidak akan dibatasi di sini untuk menggunakan Auth, Route, Session atau kelas lainnya.
sumber