Yii 是一个不错的 PHP 开发框架。2014 年 10 月发布 2.0 版,和 1.0 不兼容,是基于 PHP 5.4.0 完全重写了 Yii;
Yii Doc 非常完善,组织合理,内容丰富,可说是应有尽有。
本文以基础应用模板(basic application template)为例简单说一下;
Framework 的安装
- Install via Composer
- Install from an Archive File
源码托管在 github 上,直接下载即可,basic-app 或者 advanced-app 都可以。
wget https://github.com/yiisoft/yii2/releases/download/2.0.7/yii-basic-app-2.0.7.tgz
tar -xzvf yii-basic-app-2.0.7.tgz
Framework 的目录结构
以 yii-basic-app-2.0.6.tgz 为例,如下:
[root@i-bia8zio9 basic]# tree -L 1 -d
.
├── assets
├── commands
├── config
├── controllers
├── mail
├── models
├── runtime
├── tests
├── vendor
├── views
└── web
核心目录:vendor 目录
Framework 的核心是 vendor 目录。
多个项目之间或者同一个项目的不同版本之间可共享 vendor,比如将 vendor 提到上一层目录下,同时修改 web/index.php 文件对于 vendor 的引用地址。
框架版本
/vendor/yiisoft/yii2/BaseYii.php 文件 getVersion() 函数。
页面模板 mustache
- mustache 模板使用说明
- mustache 的 php 实现,最新版 2.10.0。
- Yii Extension Mustache
- 置于 vendor 目录下
类似地,Alipay 即时转账也应当放到 vendor 下。
配置 config
runtime/ 运行时目录
runtime/cache # Yii 框架会缓存表结构一类内容;
runtime/logs Yii 框架的运行日志,建议在 config/ 进行修改;config 目录
config/
├── components.php # 复用;从 web.php 将 components 分离提取;原框架没有;
├── console.php # command line 使用
├── db.php # 复用;
├── params.php # 复用;
└── web.php # web 使用
注:
在 config/components.php 中 FileTarget:
/* runtime/logs/app.log => 重新配置到标准的log目录下 */
'logFile' => '/logs/wph/api/app.log'
DbTarget 中记录同时记录重要的日志,比如给工程商发送短信/管理员派单事件等;
使用 mustache.js 的一个示例
mustache.js 要取到你的 web server 本地。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Mustache.js 示例</title>
<script type="text/javascript" src="mustache.js"></script>
</head>
<body>
<div>
<script language="javascript">
var data, template, html;
data = {
name : "Some Tuts+ Sites",
sites: ["Nettuts+", " Psdtuts+", "Mobiletuts+"],
url : function () {
return function (text, render) {
text = render(text);
var url = text.trim().toLowerCase().split('tuts+')[0]+ '.tutsplus.com';
return '<a href="' + url + '">' + text + '</a>';
}
}
};
template = " \
<h1> {{name}} </h1> \
<ul> {{#sites}} \
<li> {{#url}} {{.}} {{/url}} </li> \
{{/sites}}\
</ul>";
html = Mustache.render(template, data);
document.write(html);
</script>
</div>
</body>
</html>