核心部件的YiiAssetManager原理分析

核心部件的YiiAssetManager原理分析
在本文中,我们通过Yii的演示博客程序分析Yii核心部分财富管理。它可以自动加载CSS和javascript,只需要一个代码。具体分析如下:

打开博客主页并查看下面介绍JS的HTML代码:

复制代码代码如下所示:

这些js文件路径都在资产文件夹下面。Assets follows a path that is obviously hash through the folder path, which is the same way as the JS code belonging to JQ. 这个代码是从哪里来的

直接查看视图文件不能看到任何JS引入的代码,所以应该用小部件来介绍它:

复制代码代码如下:< PHP

美元->小工具('zii。部件。CListView,阵列(

' ' = > $ dataProvider dataProvider,

itemview= > '_view,

模板{项目}

));

>

This widget is also an extension of Yii's own Zii. 所以我们可以发现自CListView的代码,而这个CListView继承所以我们先看看,这个run方法

复制代码如下:公共函数运行()

{

美元-> registerclientscript();

回声chtml::opentag(美元-> tagname,美元-> htmloptions)。n;

美元-> renderkeys();

美元-> rendercontent();

回声chtml::closetag(美元-> tagname);

}

注意第一个方法,registerclientscript,这是在CListView实施:

复制代码如下:公共功能registerclientscript()

{

......

美元::CS = Yii应用程序-> getclientscript()();

$ CS -> registercorescript('jquery);

$ CS -> registercorescript('bbq);

......

}

看来,jQuery和BBP似乎很近,然后我们看看cclientscript::registercorescript方法:

复制代码如下:公共功能registercorescript($name)

{

美元-> _hasscripts =真;

美元-> _corescripts {姓名} =美元美元的名字

func_get_args $params =();

美元-> recordcachingaction('clientscript ','registercorescript,$params);

}

事实上,这主要是记录的最后一页将JS和实际生成的URL是通过getcorescripturl渲染方法:

复制代码如下:公共功能getcorescripturl()

{

如果(美元-> _baseurl!= NULL)

返回_baseurl美元->;

其他的

返回这个-> _baseurl = Yii应用::()-> getassetmanager()->发布(yii_path。' / / /网页JS源);

}

那么让我们看看出版的具体过程:

复制代码如下:公共功能发布($路径,hashbyname美元= false,美元= 1美元的水平,forcecopy = false)

{

如果(is_file($ SRC))

{

$dir =美元->哈希($ hashbyname basename($ SRC):目录($ SRC));

为文件名= basename($ SRC);

......

如果(is_dir($ SRC))

{

$dir =美元->哈希($ hashbyname basename($ SRC):$ SRC);

dstdir美元=美元-> getbasepath()。directory_separator美元目录;

......

}

我们在这里做哈希处理的道路上,所以我们看到的路径是不规则的,因为JQ系列JS代码都是相同的路径下(在框架/网络/ JS /源),因此哈希值是相同的。

此外,正如上面提到的,cassetmanager使多个模块重复使用相同的编码系统。使用cassetmanager的另一个优势是安全隔离,将真正的代码保护路径和加载的需求。

希望本文有助于基于Yii框架的PHP程序设计人。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部