使用yii2的基础版本进行开发。javascript
1. 部署php
runtimePath 若是有修改 须要 在config/web.php 中置顶新路径 而且确保此路径具备读写权限html
应用的静态文件 AppAsset 会在模板布局中使用 也须要保证 web/assets 具备读写权限。java
vendorPath 若是依赖的yii2框架文件目录发生变化 须要在 config/web.php 中指定新的 vendorPath 路径web
index.php <?php // comment out the following two lines when deployed to production defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_VENDOR_PATH') or define('YII_VENDOR_PATH', '/xxx/xxx/xxx/yii2/2.0.9'); require(YII_VENDOR_PATH . '/autoload.php'); require(YII_VENDOR_PATH . '/yiisoft/yii2/Yii.php'); $config = require(__DIR__ . '/../config/web.php'); (new yii\web\Application($config))->run();
$config = [ 'params' => require(__DIR__ . '/params.php'), //运行环境路径指到公共目录,不然在@app/runtime 而且有写入权限 'runtimePath'=>'app\runtime', 'vendorPath'=>YII_VENDOR_PATH, //若是此路径有变动,必需要在这里配置,不然会出错误 ];
2. 代码json
编写统一的基础展现对象,提供带参数的构造函数和parse方法 填充对象数据。 yii2
namespace app\vo; use yii; class BaseVo extends yii\base\Object{ function __construct(array $data=NULL) { if(!empty($data) && is_array($data)){ foreach ($data as $name => $value) { if ($this::hasProperty($name)) { $this->$name = $value; } } } } public function parse(array $data){ if(!empty($data) && is_array($data)){ foreach ($data as $name => $value) { if ($this::hasProperty($name)) { $this->$name = $value; } } } } }
统计的API接口输出类 共有属性能够在json格式化时输出,私有属性不会输出。app
<?php namespace app\common; use yii; use yii\helpers\Json; use yii\base\Object; /** * Api 输出结构类 * Class ApiResult * @package app\common */ class ApiResult extends Object{ public $code; public $msg; public $start_time; public $end_time; public $data; /** * 支持js var, json, jsonp * * @var type */ private $resultFormat = 'json'; /** * * @var type */ private $resultCallBack = ''; /** * * @var type 输出变量名 */ private $reaultVarName = ''; /** * @return mixed */ public function getCode() { return $this->code; } /** * @param mixed $code */ public function setCode($code) { $this->code = $code; } /** * @return mixed */ public function getMsg() { return $this->msg; } /** * @param mixed $msg */ public function setMsg($msg) { $this->msg = $msg; } /** * @return mixed */ public function getStartTime() { return $this->start_time; } /** * @param mixed $start_time */ public function setStartTime($start_time) { $this->start_time = $start_time; } /** * @return mixed */ public function getEndTime() { return $this->end_time; } /** * @param mixed $end_time */ public function setEndTime($end_time) { $this->end_time = $end_time; } /** * @return mixed */ public function getData() { return $this->data; } /** * @param mixed $data */ public function setData($data) { $this->data = $data; } /** * 初始化,根据参数返回输出类型 */ public function __construct() { //检查设置 $callback = Yii::$app->request->get('callback'); $varName = Yii::$app->request->get('varname'); switch (true) { case !is_null($callback): if (preg_match("/^[a-zA-Z][a-zA-Z0-9_\.]+$/", $callback)) { $this->setReturnTypeJsonp($callback); break; }else{ //输出错误 } case !is_null($varName): if (preg_match("/^[a-zA-Z][a-zA-Z0-9_\.]+$/", $callback)) { $this->setReturnTypeJsVar($varName); break; }else{ //输出错误 } default: $this->setReturnTypeJson(); break; } $this->start_time=time(); } /** * */ public function setReturnTypeJsVar($varName){ $this->resultFormat = 'jsvar'; $this->reaultVarName = $varName; } /** * */ public function setReturnTypeJson(){ $this->resultFormat = 'json'; } /** * */ public function setReturnTypeJsonp($callback){ $this->resultFormat = 'jsonp'; $this->resultCallBack = $callback; } /** * */ private function toJson (){ return Json::encode($this,JSON_UNESCAPED_UNICODE); } /** * 返回jsonp形式 * var a = {}; */ private function toJsonp (){ return htmlentities($this->resultCallBack).'('.Json::encode($this,JSON_UNESCAPED_UNICODE).');'; } /** * 返回js变量形式 * var a = {}; */ private function toJsVar (){ return 'var '.htmlentities($this->resultCallBack).'=' . Json::encode($this,JSON_UNESCAPED_UNICODE).';'; } /** * 默认 错误 * @param $code * @param string $msg * @return $this */ public function setError($code=RespCode::DEF_ERROR,$msg='失败'){ $this->setCode($code); $this->setMsg($msg); $this->setEndTime(time()); return $this; } /** * 默认成功 * @param string $data * @param number $code * @return $this */ public function setSuccess($data=null, $code=RespCode::SUCCESS){ $this->setCode($code); $this->setData($data); $this->setEndTime(time()); return $this; } /** * */ public function __toString(){ $result = ''; try{ $this->outputHeader(); switch ($this->resultFormat) { case 'json': $result = $this->toJson(); break; case 'jsonp': $result = $this->toJsonp(); break; case 'jsvar': $result = $this->toJsVar(); break; default: break; } }catch (yii\base\Exception $e){ var_dump($e); } return $result; } /** * 根据类型设置编码 */ public function outputHeader(){ switch ($this->resultFormat) { case 'json': header('Content-Type: application/json; charset=utf-8'); break; case 'jsonp': header('Content-Type: application/javascript; charset=utf-8'); break; case 'jsvar': header('Content-Type: application/javascript; charset=utf-8'); break; default: header('Content-Type: text/html; charset=utf-8'); break; } } }