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
]);
然后就可以在你的页面把变量展示出来了
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。