Using View::share
// "View" is the View Facade
View::share('shareddata', $data);
Sau đó, nội dung của $data sẽ có sẵn trong tất cả các chế độ xem dưới tên $shareddata. View::share thường được gọi trong service provider, hoặc đôi khi được gọi trong contructor của controller. Vì vậy dữ liệu sẽ được share chỉ trong các view mà controller return ra. Bạn nên đặt share
trong method boot
của service provider
chẳng hạn app/Providers/AppServiceProvider.php
hoặc trong __construct
function của Controller. Sau đây là 1 ví dụ:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::share('NAME_VIEW_SHARE', 'Trương thanh hùng'); // <= ngoài view bạn gọi biến $NAME_VIEW_SHARE
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
Using View::composer
khái niệmView composers
là các hàm callback hoặc phương thức của class được gọi khi một view đã được gọi để render. View composer sinh ra để giải quyết vấn đề mà mỗi lần view được render thì logic đó được tích hợp sẵn.
Closure-based composer
use Illuminate\Support\Facades\View;
// ...
View::composer('*', function ($view) {
$view->with('somedata', $data);
});
Cách này được thực hiện 1 cách ngắn gọn ít view cần share thì ta nhúng đoạn code trên vào trong AppServiceProvider
hàm boot
ví dụ như sau sẽ làm cho chỉ có view profile và homepage mới có biến NAME_VIEW_SHARE
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// sẽ được gọi khi 1 trong 2 view profile, homepage được render
View::composer(['profile', 'homepage'], function ($view) {
$view->with('NAME_VIEW_SHARE', 'Trương thanh hùng');
});
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
Class-based composer
use Illuminate\Support\Facades\View;
// ...
View::composer('*', 'App\Http\ViewComposers\SomeComposer');
cũng giống như view share thì view composer cũng nên được register trong service provider.
và với cách tạo class view composer thì tạo một class mới có tên ClassNameComposer nằm trong thư mục app/Http/ViewComposers
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
class ClassNameComposer
{
/**
* Create a new class name composer.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
// truyền dữ liệu ở đây nè
$view->with('data', 'Trương thanh hùng');
}
}