,,Yii核心组件AssetManager原理分析

,,Yii核心组件AssetManager原理分析

这篇文章主要介绍了Yii核心组件资产管理者原理分析,较为详细的分析了资产管理者组件的原理与实现过程,有助于深入了解yii框架的特性,需要的朋友可以参考下

本文我们通过yii自带的演示博客程序来分析Yii核心组件资产管理者,他可以自动加载钢性铸铁和javascript,并且只需要一句代码即可。具体分析如下:

打开博客的首页,会看到如下的引入射流研究…的超文本标记语言代码:

复制代码代码如下:link rel='样式表' type=' text/CSS ' href='/yii/demos/blog/assets/d6bb 6 ebe/highlight。CSS '/

link rel='样式表' type=' text/CSS ' href='/yii/demos/blog/assets/c 2e 28 f 0f/pager。CSS '/

script type=' text/JavaScript ' src='/yii/demos/blog/assets/d 6112 c 6a/jquery。量滴js '/脚本

script type=' text/JavaScript ' src='/yii/demos/blog/assets/d 6112 c 6a/jquery。巴-烧烤。js '/脚本

这些射流研究…文件的路径都在资产文件夹下,资产后面跟着一个显然经过混杂的文件夹路径,同属于日本季刊日本季刊的射流研究…代码的路径相同,这段代码从何而来呢?

直接看视角文件看不到任何引入射流研究…的代码,因此应该是使用小部件引入的:

复制代码代码如下:服务器端编程语言(专业超文本预处理器的缩写)

$ this-widget(' zii。小部件。clistview ',数组(

' dataProvider'=$dataProvider,

itemView'='_view ',

模板='{items}n{pager} ',

));

这个小部件也是yii自带的zii扩展,于是乎我们可以找到zii的CListView代码,而CListView又是继承CBaseListView,因此先看CBaseListView的奔跑方法:

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

{

$ this-registerClientScript();

echo CHtml:open标记(this-tagName,this-html options).n’;

$ this-render keys();

$ this-render content();

echo CHtml:close标记($ this-tagName);

}

请注意第一个方法registerClientScript,这个方法是在CListView中实现的:

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

{

……

$ cs=Yii:app()-获取客户端脚本();

$ cs-registerCoreScript(' jquery ');

$ cs-registerCoreScript(' BBQ ');

……

}

看到jquery和bbp似乎离真相近了些,接下来我们看CClientScript:registerCoreScript方法:

复制代码代码如下:公共函数registerCoreScript($name)

{

$ this-_ has scripts=true;

$ this-_ core脚本[$ name]=$ name;

$ params=func _ get _ args();

$ this-recordCachingAction('客户端脚本',' registerCoreScript ',$ params);

}

这里其实主要是记录了最终页面要提供;给予的js,而实际生成提供;给予的全球资源定位器(统一资源定位器)是通过getCoreScriptUrl方法:

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

{

if($this-_baseUrl!==null)

返回$ this-_ base URL;

其他

return $ this-_ baseUrl=Yii:app()-getAssetManager()-publish(YII _路径. web/js/source’);

}

接下来我们看看出版的具体过程:

复制代码代码如下:公共函数publish($path,$hashByName=false,$level=-1,$forceCopy=false)

{

if(is_file($src))

{

$dir=$this-hash($hashByName?basename($ src):dirname($ src));

$ fileName=basename($ src);

……

else if(is_dir($src))

{

$dir=$this-hash($hashByName?basename($ src):$ src);

$dstDir=$this-getBasePath().目录_分隔符$ dir

……

}

这里通过对路径做了混杂处理,因此我们看到的路径是不规则的,而由于日本季刊日本季刊系列的射流研究…代码均在同一路径下(都在框架/web/js/source下),所以混杂值是相同的。

另外,除了如上所述,CAssetManager使得多个模块可以复用相同的代码制外,使用CAssetManager的另外一个好处是安全隔离,将真实的代码放在受保护的路径下,按需加载。

希望本文所述对大家基于yii框架的服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • word文档无法编辑是怎么回事-
  • 华为手机怎么设置返回键(华为手机下面的三个按键设置方法)
  • lumia950怎么样(Lumia950体验分享)
  • otg连接是什么意思(OTG连接手机方法)
  • 笔记本触摸板怎么右键(笔记本电脑触控板手势操作设置)
  • 真我x7怎么样(realme X7 系列体验)
  • 苹果的A16处理器有多强(苹果的A16处理器的介绍)
  • 小米互传怎么用(小米手机的连接与共享教程)
  • 怎么设置电脑桌面图标自动对齐 设置电脑桌面自动整理图标的方法
  • 宽带错误651最简单解决方法(处理宽带错误651的措施)
  • 大学生手机有什么推荐(大学生换手机攻略)
  • 天玑1100和骁龙778g哪个好(骁龙778G、天玑900、天玑1100购选建议)
  • yum update 升级报错的解决办法
  • Windows10禁用屏保教程
  • 连接wifi显示无互联网连接怎么办(无线连上了却不能上网处理绝招)
  • 留言与评论(共有 条评论)
       
    验证码: