laravel下視圖間共享資料的兩種方法
1).首先我們這裡講到的laravel種共享資料的方法是
① 視圖門面share()方法實作
②視圖門面composer() 方法實作
需要注意的是 底層原理:都是使用 view 門面來通路 illuminate\contracts\view\factory 的底層實作
第一種視圖門面share方法,
找到自己的appserviceprovider ,在app下面的providers下面
然後在boot()方法裡添加兩行進行測試
view::share('name1', 'first name');
//也可使用
view()->share('name2','second name');
前端頁面随便任何地方都可以加上{{$name1}}和{{$name2}}
這樣前端所有頁面都可以顯示出共享的資料,但是缺點是,在appserviceprovider 這個函數中無法擷取緩存,隻能指向性的從資料庫中查詢一些定向資料或者自定義一些變量值,使用起來局限性比較大
那麼我們可以使用第二種視圖門面share方法,可能網上找的一些沒那麼好了解,那麼今天這裡告訴你的方法将會很容易了解和使用
首先在在app下面的providers下面建立一個檔案composerserviceprovider.php,代碼如下
namespace app\providers;
use illuminate\support\facades\db;
use illuminate\support\facades\view;
use illuminate\support\serviceprovider;
class composerserviceprovider extends serviceprovider
{
/**
* register bindings in the container.
*
* @return void
*/
public function boot() {
// 基于類的view composer
view::composer(
'*', 'app\http\controllers\pbuliccontroller' //這個地方可以調用你已經建好的任何一個控制器,前面的*号代表全局共享,如果指定了視圖檔案下面的檔案夾,可以使用admin.auth.*這種寫法,表明你要共享資料的檔案範圍
);
// view::composer(
// 'seller.*', 'app\http\controllers\pbuliccontroller'
// );
}
* register the service provider.
public function register() {
//
}
在代碼裡寫入自己的控制器,然後需要在app/config/app.php裡面添加一行代碼
app\providers\composerserviceprovider::class,
這時候,回到composerserviceprovider.php這個檔案裡,找到你調用的那個控制器,我是用的是app\http\controllers\pbuliccontroller
如果你運作會報錯,顯示缺少compose這個函數
這時候你就需要添加compose()函數到你的控制器裡函數代碼如下
public function compose(view $view)
{
//我的代碼,可以寫自己的邏輯,這裡能擷取session等各種資料
$ru_id = session('ru_id');
$need_deliver_num = db::select("select count(*) as num from dsc_order_info where pay_status = 2 and shipping_status = 0")[0]->num;
$cancel_order_num = db::select("select count(*) as num from dsc_order_info where order_sn in (select order_sn from dsc_cancel_pay_order_log) and order_status <> 4")[0]->num;
$user_need_check_num = db::select("select count(*) as num from dsc_users a left join dsc_users_operate_area b on a.user_id = b.user_id
where b.review_status = 0 or b.review_status is null")[0]->num;
$order_return_num = db::select("select count(*) as num from dsc_order_return where is_check = 0")[0]->num;
$seller_user_need_check_num = db::select("select count(*) as num from dsc_users a left join dsc_users_operate_area b on a.user_id = b.user_id
where a.ru_id_k = '$ru_id' and (b.review_status = 0 or b.review_status is null)")[0]->num;
//下面是把變量分享出去
$view->with([
'need_deliver_num' => $need_deliver_num,
'cancel_order_num' => $cancel_order_num,
'user_need_check_num' => $user_need_check_num,
'order_return_num' => $order_return_num,
'seller_user_need_check_num' => $seller_user_need_check_num
]);
然後就可以在你的頁面把變量展示出來了
一些博文中有一些參考内容因時間久遠找不到來源了沒有注明,如果侵權請聯系我删除。