Yii框架真的很复杂!! 写的第一段yii代码,附带心得 [ 技术分享 ]
实现功能1:取出数据库全局变量
将表 {{%config}} 的记录取出,字段 varname
当变量名,字段value
当值
// 配置全局 event
[
'on beforeAction' => ['app\events\initSiteConfig','assign']
]
//文件 app\events\initSiteConfig
namespace app\events;
use yii\base\Event;
use yii\db\Query;
class initSiteConfig extends Event
{
public static function assign()
{
$rows = (new Query())
->select('*')
->from('{{%config}}')
->all();
$arr = array();
foreach ($rows as $row) {
$arr[$row['varname']] = $row['value'];
}
\Yii::$app->params = array_merge(\Yii::$app->params, $arr);
}
}
功能2:第一个模型 model 和action
// 文件 app\controllers\SiteController.php 的 actionIndex()
use app\models\Area;
public function actionIndex()
{
$area = new Area();
$arrAreaIndex = $area->getAreaIndex();
return $this->render('index', [
'arrAreaIndex' => $arrAreaIndex
]);
}
点评与疑惑:貌似这里 new Area()
如果放多少个就会执行多少次,是这样吗?为什么不让他不重复实例化?
// 文件 app\models\Area.php
namespace app\models;
use yii\db\ActiveRecord;
class Area extends ActiveRecord
{
/**
* @description 获取单个
*
* @param $id
*
* @return array|bool
*/
public function getOne($id)
{
$row = $this->findOne($id);
return !empty($row) ? $row->attributes : false;
}
/**
* @description 获取所有省份
* @return array|\yii\db\ActiveRecord[]
*/
public function getProv()
{
return $this->find()
->where(' level=1 ')
->orderBy(' sortid asc ')
->asArray()
->all();
}
/**
* @description 返回省份城市 2级
* @return array|\yii\db\ActiveRecord[]
*/
public function getAreaIndex()
{
static $arr = null;
if ($arr === null) {
$cacheId = 'area';
$arr = \Yii::$app->cache->get($cacheId);
if (empty($arr)) {
$arrRows = $this->find()
->where(' level=1 or level=2 ')
->orderBy(' level asc ,sortid asc ')//必须先按照level asc!
->asArray()
->all();
foreach ($arrRows as $k => $row) {
if ($row['level'] == 1) {
$row['sub'] = array();
$arr[$row['id']] = $row;
} else if ($row['level'] == 2) {
$arr[$row['id']]['sub'][] = $row; //必须先按照level asc !
}
}
if (!empty($arr)) {
\Yii::$app->cache->set($cacheId, $arr);
}
}
}
return $arr;
}
}
共 2 条回复
phptest
注册时间:2014-06-08
最后登录:2018-12-03
在线时长:9小时54分
最后登录:2018-12-03
在线时长:9小时54分
- 粉丝5
- 金钱118
- 威望0
- 积分208