Asset 资源的管理,让初学者糊涂了

抱歉,按理来说不应该问这种低级趣味的问题。

我之前采用的CodeIgniter 1.7,这个框架的确简单,基本上边看文档和例子就可以开工了,而且里面的代码比较灵活,兼顾了各方面的好的、不好的习惯。之所以转到Yii是因为CI的某些特性束缚了我的设计。但是我切到Yii之后,发现学习曲线比较陡峭,这可能和我OOP的经验较少有关。

但是,我真的搞不懂Yii里面对于CSS/Script/Image文件的管理方式。在CI中很简单,只需要放置在一个全局可以访问的文件夹中就好了。在View/Controller中都可以使用路径访问到。与其相比,Yii的方式我没有搞懂,好像采用了CAssetManger和CClientScript两个类。这两个类都可以访问CSS/JS代码,但是CAssetManager是用来复制私有JS到公开文件夹中,但是也有Behavior/Event等前端JS代码的方法;CClientScript也有Behavior/Event的方法。

我看来看Yii自带的工程和Yii_Playground,更加让我糊涂了。Yii自带工程中在Login/Contact中有jquery.js和另外的一个js代码。但是工程代码中并没有使用到publish()和register()方法,基本上我就不知道这两个js是在哪里插入到View中的?Yii_Playground中倒是有,但是这两种方法让我困惑的是,究竟哪种是Yii推荐的?

我觉得Yii的两个类让很简单的事情复杂化了?而且我个人希望将前端和后端代码尽可能分离,在后端代码中混着前端JS真的不是件容易维护的事情。

希望高手给我答疑解惑。

你提的是个好问题,很多朋友也有类似疑问。

assets(js, css, 图像等)一般有以下几种发布方式,实践中需要灵活运用:

  1. 作为单独的文件直接存放在web目录下(例如把pager.css单独放到css目录下)。优点:高效,有相对的独立性。缺点:如果项目很大,资源文件可能很多,其管理和使用都将比较复杂。重用也相对复杂,重用时需要特别注意资源文件的存放位置和对应的URL。

  2. 和其它代码片段一起存放在web目录下的文件里(例如把pager的CSS放到一个main.css里,和其它CSS在一起)。优点:高效。缺点:如果项目很大,资源文件可能很复杂,很难维护。另外重用也更复杂,因为需要提取对应的资源代码片段。

  3. 和php代码放一起,在调用该php代码时通过assetManager发布(复制)到web目录下。优点:易重用(例如你使用yii自带的CLinkPager,你不需要考虑如何放置它的js/css)。缺点:效率不高。

一般来说,如果你的代码不打算在其它项目里重用,你应该考虑1或2。方法2主要适用于小项目。方法3主要用于你希望重用的部件,例如google map等。

另外,前后端的分离不是绝对的。在需要大量使用ajax的情况下,开发PHP和对应的js代码往往是同一个人。如果你只着眼于一个部件,那么它的前后端还是分开的。

嗯,学习!

thanks

Thanks!

学习了,我也一直不明白。

mark!

学习了,强哥说滴比较清楚。

看到demo里面存在assets文件夹和css文件夹

针对assets文件夹存放的内容有什么特殊的么?还是自己定义的js、图像等也是存放在assets里面。

assets文件夹主要是存放什么用的呢?