让我们看看,怎样以最小的代价使用Yii2创建一个站点。目的是学习使用Yii2应用模版的安装过程,并开始体验模版里提供的一系列特性。
一个基本应用
开始使用Yii2最基本和直接的方式,是使用Yii2团队发布在GitHub上的模版文件(https://github.com/yiisoft/yii2),并使用Composer工具。在Yii的上一个版本中,你必须自己手工下载、并解压framework文件,当你使用Yii2时,你同样可以手工下载,但同时也可以采用专门精心准备的Composer工具来简化安装过程。
安装basic模版
在硬盘上找一个合适的目录,获取Composer的PHP归档文件(PHAR)。可以采用多种方式,例如,使用如下命令:
curl -sS https://getcomposer.org/installer | php
然后,运行下面的命令会创建一个名为basic的子目录,并使用Yii2团队发布的basic模版填充完成:
php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
请注意:Yii2有几个特定的系统范围的依赖。你可能需要事先在GitHub仓库里查阅一下composer.json文件,学习它的用法(https://github.com/yiisoft/yii2)。在任何案例中,Composer会告诉你需要安装哪些东西才能使Yii2正常工作。Yii2经常更新,并且它的运行环境要求也会随之变化。
在开始执行上面的命令之前,你最好查看一下Composer的文档,理解命令的含义。跟我们有关的部分 yiisoft/yii2-app-basic basic,意思是“将发布在 https://github.com/yiisoft/yii2-app-basic 的内容,拷贝到本地的basic目录 ”。这个命令将安装项目的骨架,包含一系列预定义的目录。这其中有一个名为vendor的子目录,里面包含了很多的Composer包。basic目录,就是你新建应用的根目录。
使用Composer安装完所需的包,你可以使用下面这条命令:
php -S localhost:8000 –t basic/web
在命令中,8000是一个端口号,你可以根据自己的情况进行修改。这样,一个web server就已经可以访问了。
请注意:这当然并不是配置PHP Web应用的最佳方式。内建的web server只适应于“冒烟测试”,用以检验应用是否能正常工作。它只适合本地开发使用,而不能承担高负载。下一章将会介绍线上环境的部署。
使用浏览器访问 http://localhost:8000/。你将看到Yii2的欢迎页,这意味着你的基本设置已经搞定了。
basic模版的细节
通过阅读模版提供的README文件(https://github.com/yiisoft/yii2/blob/master/apps/basic/README.md),你可以获得basic目录结构的详尽说明。或者,你也可以阅读Yii2关于basic模版的文档(http://www.yiiframework.com/doc-.0/guide-start-installation.html)。
最重要的事情是,你需要理解,web目录,这个对外发布的目录,只是整个应用全部代码中的一个目录。web目录之外的其它目录,都是不能通过web server进行访问的。
正如你已经看过的安装过程描述,在你已经拥有PHP环境,可选的curl工具时,没有特殊的环境需要配置,所有的依赖都通过Composer管理起来了。
在basic模版中,第3代的自动化测试工具也设置好了。它包含了验收测试,功能测试,单元测试等大部分功能。已经包含在模版中的测试,就像示例程序一样非常有用,告诉我们怎样使用测试框架,这个测试工具就是 Codeception(http://codeception.com/)。
如果你只是想展示一些新闻种子或者做一个只包含几个页面的web工具,这个模版就已经足够可用了。然而,如果你的目标是包含前台和后台的大型系统(10个以上的独立路由),这就缺少一些子系统了。
同查看composer.json文件中的项目依赖,Yii2有几个重要的部分做成了独立的插件包,它们也通过Composer安装好了。这些包分别是:
-
Gii,代码生成器,将会在第3章讨论,自动生成CRUD代码
-
调试控制台,已经包含在basic应用模版中
-
Codeception测试框架的一个包装
-
SwiftMailer库(http://swiftmailer.org/)的包装(https://github.com/yiisoft/yii2-swiftmailer)
-
Twitter Bootstrap UI库被打包进Yii2的asset包中(http://getbootstrap.com/)
前3个只是在开发时使用,放在生产环境中反而有害。基本上,你在任何一个项目中都需要它们。
basic模版安装的快速指引:
curl -sS https://getcomposer.org/installer | php
php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
php -S localhost:8000 -t basic/web
高级应用
相对于basic模版,Yii2还提供了一个advanced模版。它更多的针对中型应用(例如一些真实的商业应用),这种应用一个典型的特征是有两个分离的界面。一个进行内容管理,另一个展示给访问者。因此,通过这个模版,你能得到一个完整的CMS骨架。
安装advanced模版
第一步跟安装basic模版类似。需要获取Composer,并且设置一个新的项目:
curl -sS https://getcomposer.org/installer | php
php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-advanced advanced
你可能已经注意到,在上面的命令中,仅仅是把“basic”替换成了“advanced”。
现在,我们来做一些新的改变。首先,进入刚刚创建的advanced目录,你需要生成本地化配置,运行下面的命令:
./init
是的,就是在应用的根目录执行init脚本。它会询问你想配置开发模式还是生产模式,并创建所有必须的辅助配置代码,以及入口脚本。需要明确说明的是,它仅仅根据你选择的是开发环境还是生产环境,把文件拷贝到environments目录下的dev或prod子目录中。打开environments目录看看,你就会理解init脚本是怎么工作的了。
下一步,你需要创建本应用使用的数据库。缺省情况下,配置开发环境,你应该在本机设置一个名为yii2advanced的数据库,root用户密码为空,你可以在common/config/main-local.php文件中看到这些细节。
既然你的数据库已经设置好了,你就可以运行迁移了。我们将在下一章讨论迁移脚本(并且我们甚至会自己写一些脚本),但是,如果你对数据迁移这个非常重要的概念很陌生,你需要在Yii2网站上阅读相关的官方文档(在写作本书时,官方文档还未发布,但是框架的文档在这里 https://github.com/yiisoft/yii2/blob/master/docs/guide/db-migrations.md)。(译注:创建数据库,写入初始化数据,升级数据库表等操作,建议放在迁移脚本中)
只需运行下面的命令即可:
./yii migrate
这个命令会展示当前迁移列表,目前包含一条迁移,并询问你是否要执行迁移。(译注:迁移使用前面配置的数据库,用以记录迁移执行的历史,因此,如果前面没有配置数据库,执行上面的命令时会有错误提示)
现在,所有事情都搞定了。执行下面的命令,让前后台都可以访问:
php -S localhost:8080 -t frontend/web
php -S localhost:8081 -t backend/web
与配置basic模版一样,我们使用了PHP内建的web server,仅仅是因为作为示例,这比在Apache或其它web server中配置更为简单。
现在,你可以使用后台进行内容管理,前台展示给访客。同时,你还有一个完善的控制台,可以通过yii脚本来执行迁移。advanced模版的前台跟basic模版很相似。下面是后台运行起来的截图:
后台缺省处于锁定状态,点击登录菜单,登录成功后,你才能看到和basic模版或前台一样的页面。
advanced模版的细节
对于advanced模版,最重要的事情是将3个basic模版整合在一起了:
-
frontend目录中,放置的是前台代码。对外发布的功能、内容都放在这里。
-
backend目录是为CMS(内容管理系统)准备的,非授权用户不能访问。你应该把CRUD这样的管理程序放在这里。
-
console目录主要用来存放自定义的控制台命令,可以放置任意多命令,就像迁移脚本一样。
-
common目录包含在前台、后台、控制台都可以使用的公共代码,因为这几部分构成了整个应用。
当然,没有人会强制你像上面描述的一样使用前台和后台,你也可能会有两个前台共享相同的代码,你可以按你想要的方式自由的使用。不管怎样,advanced模版已经准备好的后台UI,在开始时就提供了权限的密码保护。
在刚刚安装的advanced应用中,你需要知道登录特性。初始时,没有定义用户,你必须使用前台的signup(注册)来自己创建一个。这样,你就能用刚刚创建的身份登录前台和后台。前台跟basic应用一样,后台也差不多,仅仅是加入了登录功能。所以,后续的开发就完全交给你了。
advanced安装的快速指引:
curl -sS https://getcomposer.org/installer | php
php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-advanced advanced
cd advanced
./init
mysql -u root -e 'create database yii2advanced'
./yii migrate
php -S localhost:8080 -t frontend/web
php -S localhost:8081 -t backend/web
小结
Yii2几乎允许你配置framework中使用的所有路径,因此,你可以按你想法创建目录结构。利用PHP5.3引入的命名空间,你甚至可以使物理结构不同于逻辑结构,也就是说目录中文件的存放不同于命名空间中的类的结构,但这样做很乏味。
在下一章,我们将会不使用模版,白手起家,通过Yii2创建一个真实的项目(即使很小)。