laravel下视图间共享数据的两种方法
一、总结
一句话总结:
①视图门面share()方法实现:这样有很多限制,比如获取不到Auth里面的数据
②视图门面composer()方法实现:这样可以获取到Auth里面的数据
底层原理:都是使用 View 门面来访问 IlluminateContractsViewFactory 的底层实现
1、laravel下视图间共享数据的share()方法使用流程?
【位置】:找到自己的AppServiceProvider ,【在app下面的Providers下面】
【代码】:在boot()方法里添加代码进行测试:【View::share('name1', 'first name')】;
2、laravel下视图间共享数据的 【share()方法】 使用 【局限】?
这样前端所有页面都可以显示出共享的数据,但是缺点是,在AppServiceProvider 这个函数中【无法获取缓存】,只能【指向性的从数据库中查询一些定向数据】或者【自定义一些变量值】,使用起来局限性比较大
二、laravel下视图间共享数据的两种方法
转自:https://www.jianshu.com/p/49d9f77a9380
1).首先我们这里讲到的laravel种共享数据的方法是
① 视图门面share()方法实现
②视图门面composer() 方法实现
需要注意的是 底层原理:都是使用 View 门面来访问 IlluminateContractsViewFactory 的底层实现
第一种视图门面share方法,
找到自己的AppServiceProvider ,在app下面的Providers下面
然后在boot()方法里添加两行进行测试
View::share('name1', 'first name');
//也可使用
view()->share('name2','second name');
前端页面随便任何地方都可以加上{{$name1}}和{{$name2}}
这样前端所有页面都可以显示出共享的数据,但是缺点是,在AppServiceProvider 这个函数中无法获取缓存,只能指向性的从数据库中查询一些定向数据或者自定义一些变量值,使用起来局限性比较大
那么我们可以使用第二种视图门面share方法,可能网上找的一些没那么好理解,那么今天这里告诉你的方法将会很容易理解和使用
首先在在app下面的Providers下面新建一个文件ComposerServiceProvider.php,代码如下
namespace AppProviders;
use IlluminateSupportFacadesDB;
use IlluminateSupportFacadesView;
use IlluminateSupportServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
/**
* Register bindings in the container.
*
* @return void
*/
public function boot() {
// 基于类的view composer
View::composer(
'*', 'AppHttpControllersPbulicController' //这个地方可以调用你已经建好的任何一个控制器,前面的*号代表全局共享,如果指定了视图文件下面的文件夹,可以使用admin.auth.*这种写法,表明你要共享数据的文件范围
);
// View::composer(
// 'seller.*', 'AppHttpControllersPbulicController'
// );
}
/**
* Register the service provider.
*
* @return void
*/
public function register() {
//
}
}
在代码里写入自己的控制器,然后需要在app/config/app.php里面添加一行代码
AppProvidersComposerServiceProvider::class,
这时候,回到ComposerServiceProvider.php这个文件里,找到你调用的那个控制器,我是用的是AppHttpControllersPbulicController
如果你运行会报错,显示缺少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
]);
}
然后就可以在你的页面把变量展示出来了