©
This document usesPHP Chinese website manualRelease
共享的托管环境常常会对目录结构以及配置文件有较多的限制。然而,在大多数情况下,你仍可以通过少量的修改以在共享托管环境下运行 Yii 2.0。
由于共享托管环境往往只有一个 webroot,如果可能,请优先使用基础项目模板( basic project template )构建你的应用程序。参考 安装 Yii 章节在本地安装基础项目模板。当你让应用程序在本地正常运行后,我们将要做少量的修改以让它可以在共享托管服务器运行。
用FTP或者其他的工具连接到你的托管服务器,你可能看到类似如下的目录结构:
configlogs www
在以上,www
是你的 web 服务器的 webroot 目录。不同的托管环境下名称可能各不相同,通常是类似:www
,htdocs
, 和public_html
之类的名称。
对于我们的基础项目模板而言,其 webroot 名为web
。 在你上传你的应用程序到 web 服务器上去之前,将你的本地 webroot 重命名以匹配服务器。 即: 从web
改为www
,public_html
或者其他你的托管环境的 webroot 名称。
如果你有 FTP 根目录的写权限,即,有config
,logs
和www
的根目录,那么,如本地根目录相同的结构上传assets
,commands
等目录。
如果你的 web 服务器是 Apache,你需要增加一个包含如下内容的.htaccess
文件到你的web
目录(或者public_html
根据实际情况而定,是你的index.php
文件所在的目录)。
Options+FollowSymLinksIndexIgnore*publicstaticfunctionmerge($a,$b)
你经常要将一个对象或者对象的数组转换成一个数组,常见的情形是,为了通过REST API提供数据数组(或其他使用方式), 将AR模型(活动记录模型)转换成数组。如下代码可完成这个工作:
$posts= Post::find()->limit(10)->all();$data= ArrayHelper::toArray($posts, ['app\models\Post'=> ['id','title',// the key name in array result => property name'createTime'=>'created_at',// the key name in array result => anonymous function'length'=>function($post){returnstrlen($post->content); }, ], ]);
第一个参数包含我们想要转换的数据,在本例中,我们要转换一个叫Post
的 AR 模型。
第二个参数是每个类的转换映射表,我们在此设置了一个Post
模型的映射。 每个映射数组包含一组的映射,每个映射可以是:
这上面的转换结果将会是:
['id'=>123,'title'=>'test','createTime'=>'2013-01-01 12:00AM','length'=>301, ]