常用的7个YII技能知识

学习YII和使用的过程中,总结了一些技能知识点,方便自己的记忆。这里分享给大家。

1、不通过日志获取AR执行的原生SQL语句和打印变量数据

$query = User::find() ->select([’username’])->where([’id’=>[1,2,3,4])// get the AR raw sql in YII2

$commandQuery = clone $query;echo $commandQuery->createCommand()->getRawSql();$users = $query->all();

打印变量数据可以这样写://引用命名空间use yii\helpers\VarDumper;//使用

VarDumper::dump($var);//使用2  第二个参数是数组的深度  第三个参数是是否显示代码高亮(默认不显示)

VarDumper::dump($var, 10 ,true);

2、从数据库二维数组中返回一维数组并配合rules验证规则实现分类数据过滤。

普通返回表记录的二维数组

Member::find()->select(’userid’)->asArray()->all();

Array

(

[0] => Array

(

[userid] => 1

)

[1] => Array

(

[userid] => 2

)

[2] => Array

(

[userid] => 3

)

)

返回字段的一维数组

Member::find()->select(’userid’)->asArray()->column();

或者:

\yii\helpers\ArrayHelper::getColumn(Member::find()->all(), ’userid’)

Array

(

[0] => 1

[1] => 2

[2] => 3

)

返回一维数组配合验证规则验证数据正确性,如分类catid正确分为只有1-4,但是在devTools打开修改catid为5,提交同样会到数据库,此时rules验证规则如下:

[’catid’, ’in’, ’range’ => category::find()->select(’id’)->asArray()->column()],

当然,这个也可以通过下面这样子写,一样的:

[’catid’, ’in’, ’range’ => \yii\helpers\ArrayHelper::getColumn(category::find()->all(), ’catid’)],

这样就可以过滤不正确的分类数据了!

3、友好时间表示方法

之前一直使用自定义的友好时间函数。几天前发现万能的YII已经提供了友好时间访问,代码如下:

Yii::$app->formatter->asRelativeTime(’1447565922’); //2小时前

4、使用不同的响应类型或者自定义响应类型

有效的格式:

FORMAT_RAW

FORMAT_HTML

FORMAT_JSON

FORMAT_JSONP

FORMAT_XML

JSON响应

public function actionIndex()

{

\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

$items = [’some’, ’array’, ’of’, ’data’ => [’associative’, ’array’]];

return $items;

}

返回:

{

"0": "some",

"1": "array",

"2": "of",

"data": ["associative", "array"]

}

自定义响应格式

让我们创建一个定制的响应格式。例子做点有趣和疯狂的事我返回PHP 数组。 首先,我们需要格式化程序本身。创建 components/PhpArrayFormatter.php:

<?phpnamespace app\components;use yii\helpers\VarDumper;use yii\web\ResponseFormatterInterface;class PhpArrayFormatter implements ResponseFormatterInterface

{

public function format($response)

{

$response->getHeaders()->set(’Content-Type’, ’text/php; charset=UTF-8’);

if ($response->data !== null) {

$response->content = "<?php\nreturn " . VarDumper::export($response->data) . ";\n";

}

}

}

组件配置:

return [

// ...

’components’ => [

// ...

’response’ => [

’formatters’ => [

’php’ => ’app\components\PhpArrayFormatter’,

],

],

],

];

现在是准备使用。在 controllers/SiteController 创建一个新的方法 actionTest:

public function actionTest()

{

Yii::$app->response->format = ’php’;

return [

’hello’ => ’world!’,

];

}

返回如下:

<?phpreturn [

’hello’ => ’world!’,

];

5、AR入库前时间通过在模型重写behaviors方法实现优雅入库方式。

如下:

public function behaviors()

{

return [

’timestamp’ => [

’class’ => TimestampBehavior::className(),

’attributes’ => [

ActiveRecord::EVENT_BEFORE_INSERT => ’creation_time’,

ActiveRecord::EVENT_BEFORE_UPDATE => ’update_time’,

],

’value’ => function() { return date(’U’); // unix timestamp },

],

];

}

6、除配置组件记录不同级别日志外,也可以自定义在某个地方记录LOG日志

use yii\log\Logger;

\Yii::getLogger()->log(’User has been created’, Logger::LEVEL_INFO);

7、 ActiveForm类不让生成label标签

//方法一,通过ActiveForm类

$form->field($model, ’字段名’)->passwordInput([’maxlength’ => true])->label(false) ?>

//方法二,通过 HTML类

Html::activeInput($type,$model,’字段名’)

Yii2给必填项加星,样式如下:

div.required label:after {

content: " *";

color: red;

}

原文来自:博客园/sandea

时间: 2024-10-08 09:04:12

常用的7个YII技能知识的相关文章

Yii基础知识

WorkFlow Of Yii: 1.用户访问一个URL,Web服务器执行入口脚本index.php.2.入口脚本创建一个应用实例application并且执行.3.应用实例从request组件中获取用户请求的详细信息.4.应用在urlManager组件下获取控制器和方法.5.应用创建了一个所请求控制器的实例并进一步处理用户的请求,创建并执行了与控制器相关的过滤器.如果过滤器通过,则动作执行.6.动作从数据库中读取model.7.动作通过模型渲染视图.8.视图读取并显示模型的属性.9.视图执行小

较详细介绍IBM AIX操作系统上常用的korn shell的基础知识

[导读]较详细介绍IBM AIX操作系统上常用的korn shell的基础知识. Korn Shell执行命令的顺序1.关键字,如if,for,function等2.别名(Aliases)3.内部命令,如cd, whence和函数等4.函数Functions5.脚本Scripts.在PATH中的可执行程序※找到命令的根源用下面的命令:whence -v command或:type commandAlias(别名)alias aliasname=command取消一个别名:unalias alia

YII2项目常用技能知识总结

1.不通过日志获取AR执行的原生SQL语句和打印变量数据 $query = User::find() ->select(['username'])->where(['id'=>[1,2,3,4]) // get the AR raw sql in YII2 $commandQuery = clone $query; echo $commandQuery->createCommand()->getRawSql();$users = $query->all(); 打印变量数

(待整理)个人技能知识图谱

三年测试,五年开发,三年全职妈妈,专业技能属于基本忘光的一个状态.原单位老领导听说本人找工作,给了一个面试机会,结果自然不用说,一塌糊涂. 为了复习,特将以前知识做了大概整理,挨个梳理复习,期待早日找到好工作!!加油加油! C++基础 数据类型和表达式 预处理和语句 函数和作用域 类和对象 继承性和派生类 多态性和虚函数 I/O流库 数据结构 队列.链表.栈.堆栈. 树.二叉树   图.有向图.无向图 九大排序算法以及复杂度 算法1)动态规划中的背包问题,LCS(最长公共子序列) 2)贪心算法中

Linux开机启动流程及运行级别和常用组合键 == 第一次所学知识框架==

第一次写经验总结 望体谅 linux开机启动过程总结=简化版 1)  加载bios,获取cpu,内存,硬盘 2)  读取MBR,获取bootloader(grub) 3)  根据grub的内容加载内核 4)  内核执行/sbin/init,根据/etc/inittab完成初始化 5)  init执行 /etc/rc.d/rc.sysinit 6)  启动内核模块,根据/etc/modprobe.conf或/etc/modprobe.d/目录下的的文件来加载模块 7)  根据运行级别不同,init

MySQL不常用、易忽略的小知识

笔者从事开发也有一段时间了,关于数据库方面的一些小知识在这里总结一下 1.count(*),count(1)与count(column)区别 count(*)对行的数目进行计算,包含NULL count(1)对行的数目进行计算,包含NULL count(column)对特定的列的值具有的行数进行计算,不包含NULL值. 所以count(1)这个用法和count(*)的结果是一样的. 注意: 如果表没有主键,那么count(1)比count(*)快. 如果有主键,那么count(主键,联合主键)比

融会贯通——最常用的“合成复用原则”技能点Get

复用一个类的时候,多使用对象的组合/聚合的关联关系,而不是继承. 之前提到的"依赖倒转原则",是以里氏代换原则为基础的实现开闭原则目标的手段,这一条路线涉及到的是类的继承(包括单继承和接口实现),他们支撑了Java多态的特性. 但是今天要谈一谈Java另一个特性--封装.封装就是不要暴露过多的基类内部细节给子类,让高层的操作神秘起来,不让小兵知道.合成复用原则体现的就是封装的特性. 所以可以推论出,多使用对象的组合/聚合关系,而不是继承,从而实现不会暴露过多的基类操作细节给子类的目的.

Yii项目知识搜集

[['rId','advertiser_id','image_file'], 'unique','targetAttribute'=>['rId','advertiser_id','image_file'],'message'=>'重复插入数据'],//设置多个字段唯一 public static function getTableSchema() //设置字段的可变属性 { $schema = parent::getTableSchema(); $schema->columns['ag

Web前端知识技能大汇总

Web前端知识技能大汇总 来源:github 发布时间:2015-07-08 阅读次数:3432 28 项目起源 还记得@jayli 的这幅前端知识结构图么. 图片的形式具有诸多的不便.缺失源图的我们,无法为此图贡献些什么,随着时间的迁移,或许有些技术点会发生改变,所以有了这个GitHub项目.我们可以通过协作的方式来共同维护这个项目.Git的历史记录也可以见证前端行业的一些变迁. 可视化效果 前端开发知识结构 前端工程师 浏览器 IE6/7/8/9/10/11 (Trident) Firefo