框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面compor() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容。
首先,需要注意的一点是:都是使用 view 门面来访问 illuminate\contracts\view\factory 的底层实现
有时需要在所有视图之间共享数据片段,这时候可以使用视图门面的 share 方法。
1,一般情况下,我会在app\http\controllers\xx下创建一个基础控制器 bacontroller.php,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
namespace
app\http\controllers\extman;
u
illuminate\routing\controller;
class
bacontroller
extends
controller
{
public
function
__construct(\auth
$auth
)
{
$this
->initviewshare();
//视图共享数据
}
/**
* 视图共享数据方法
*/
public
function
initviewshare()
{
view()->share(
'action_name'
,get_action_name());
//当前url的方法器名
}
}
//视图使用
//共享视图一般都是在layout中
{{
$action_name
}}
get_action_name() 是自定义的一个函数。
tips:
创建 app\helpers\extmanfun.php , compor.json的autoload引入
1
2
3
"files"
:[
"app/helpers/extmanfun.php"
]
运行 compor dump-autoload 会自动加载
2,在 apprviceprovider 服务提供器(或者新建提供器) 的boot方法中调用share()
1
2
3
4
5
6
7
8
9
10
11
1我用英文怎么说2
13
14
15
16
17
<?php
namespace
app\providers;
u
view;
class
apprviceprovider
extends
rviceprovider
{
/**
* 启动所有应用服务
*
* @return void
*/
public
function
boot()
{
view::share(
'key'
,
'value'
);
//也可使用
view()->share(
'name'
,
'共享数据片段'
);
}
}
视图合成器是当视图被渲染时的回调函数或类方法 ,如果你每次渲染视图时都要绑定视图的数据,比如用户登陆信息。可以使用compor() 将逻辑组织到一个单独的地方。
本例中,我们将在apprviceprovider服务提供器中注册视图合成器,
提供器代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
namespace
app\providers;
#
u
illuminate\support\facades\view;
u
illuminate\support\rviceprovider;
class
apprviceprovider
extends
rviceprovider
{
public
function
boot()
{
// 使用基于类方法
// 第一个参数可以指定共享给那个视图,多个视图用数组,共享到全部视图可以用 *
// 或者某个目录下所有视图
view()->compor(
//'*', 'app\http\viewcompors\authcompor'
//['extman.home, welcome'], 'app\http\viewcompors\authcompor'
[
'extman.*'
],
'app\http\viewcompors\authcompor'
);
//使用基于回调函数
曙目view()->compor(
'*'
,
function
(
$view
){
$view
->with(
'ur'
三国歇后语,
array
(
'name'
=>
'test'
,
'avatar'
=>
'/path/to/test.jpg'
));
});
}
other code
}
如果创建一个新的服务提供器来包含视图compor 注册,需要添加该服务提供者到配置文件 config/app.php 的 providers 数组中
到此已经注册了视图合成器,每次渲染 extman目录下所有视图时都会执行 authcompor@compo 方法。
定义视图合成器类 app\http\viewcompors\authcompor.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
namespace
app\http\viewcompors;
u
illuminate\view\view;
u
illuminate\repositories\urrepository;
class
authcompor
{
protected
$urs
;
public
function
__construct(urrepository
$urs
)
{
// 依赖注入通过服务容器自动解析...
$this
->urs =
$urs
;
}
//绑定数据到视图
public
function
compo(view
$view
)
{
$ur_info
= \auth::ur();
$view
->with(
'motto'
,
$ur_info
);
$view
->with(
'count'
,
$this
->urs->
count
());
}
}
视图被渲染前,authcompor类的 compo 方法被调用,同时 illuminate\view\view 实例被注入该方法,从而可以使用其 with 方法来绑定数据到视图。
所有的视图合成器都会拳皇97出招表通过 服务容器 进行解析,所观察蚂蚁以你可以在视图合成器的构造函数中类型提示需要注入的依赖项。
本文发布于:2023-04-07 20:00:55,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/f8cd4f3b31786e3bd543d3aaa2b804d3.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法.doc
本文 PDF 下载地址:laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法.pdf
留言与评论(共有 0 条评论) |