本文实例总结了YII框架常用技巧。分享给大家供大家参考,具体如下:

获取当前Controller name和action name(在控制器里面使用)

echo $this->id;

echo $this->action->id;

控制器获取当前模块

$this->module->id

不生成label标签

// ActiveForm类

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

Yii2 获取接口传过来的 JSON 数据:

Yii::$app->request->rawBody;

防止 SQL 和 Script 注入:

use yii\helpers\Html;

use yii\helpers\HtmlPurifier;

echo Html::encode($view_hello_str) //可以原样显示代码

echo HtmlPurifier::process($view_hello_str) //可以过滤掉代码

大于、小于条件查询

// SELECT * FROM `order` WHERE `subtotal` > 200 ORDER BY `id`

$orders = $customer->getOrders()

->where(['>', 'subtotal', 200])

->orderBy('id')

->all();

搜索的时候添加条件筛选

$dataProvider = $searchModel->search(Yii::$app->request->queryParams);

// $dataProvider->query->andWhere(['pid' => 0]);

$dataProvider->query->andWhere(['>', 'pid', 0]);

//可选传参

$dataProvider->query->andFilterWhere(['id'=>isset($id)?$id:null]);

有两种方式获取查询出来的 name 为数组的集合 [name1, name2, name3]:

方式一:

return \yii\helpers\ArrayHelper::getColumn(User::find()->all(), 'name');

方式二:

return User::find()->select('name')->asArray()->column();

打印数据:

// 引用命名空间

use yii\helpers\VarDumper;

// 使用

VarDumper::dump($var);

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

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

表单验证,只要需要一个参数:

public function rules()

{

return [

[['card_id', 'card_code'], function ($attribute, $param) {//至少要一个

if (empty($this->card_code) && empty($this->card_id)) {

$this->addError($attribute, 'card_id/card_code至少要填一个');

}

}, 'skipOnEmpty' => false],

];

}

SQL is not null条件查询

// ['not' => ['attribute' => null]]

//['ISNULL(`attribute`)'=>true]

$query = new Query;

$query->select('ID, City,State,StudentName')

->from('student')

->where(['IsActive' => 1])

->andWhere(['not', ['City' => null]])

->andWhere(['not', ['State' => null]])

->orderBy(['rand()' => SORT_DESC])

->limit(10);

校验 point_template_id 在 PointTemplate 是否存在

public function rules()

{

return [

[['point_template_id'], 'exist',

'targetClass' => PointTemplate::className(),

'targetAttribute' => 'id',

'message' => '此{attribute}不存在。'

],

];

}

Yii给必填项加星

div . required label:after {

content:

" *";

color:

red;

}

执行SQL查询并缓存结果

$styleId = Yii::$app->request->get('style');

$collection = Yii::$app->db->cache(function ($db) use ($styleId) {

return Collection::findOne(['style_id' => $styleId]);

}, self::SECONDS_IN_MINITUE * 10);

场景:

数据库有user表有个avatar_path字段用来保存用户头像路径

需求: 头像url需要通过域名http://b.com/作为基本url

目标: 提高代码复用

此处http://b.com/可以做成一个配置

示例:

User.php

class User extends \yii\db\ActiveRecord

{

...

public function extraFields()

{

$fields = parent::extraFields();

$fields['avatar_url'] = function () {

return empty($this->avatar_path) ? '可以设置一个默认的头像地址' : 'http://b.com/' . $this->avatar_path;

};

return $fields;

}

...

}

ExampleController.php

class ExampleController extends \yii\web\Controller

{

public function actionIndex()

{

$userModel = User::find()->one();

$userData = $userModel->toArray([], ['avatar_url']);

echo $userData['avatar_url']; // 输出内容: http://b.com/头像路径

}

}

Model 里面 rules 联合唯一规则

[['store_id', 'member_name'], 'unique', 'targetAttribute' => ['store_id', 'member_name'], 'message' => 'The combination of Store ID and Member Name has already been taken.'],

Model多个字段一条规则不同提示

[['name', 'email', 'subject', 'body'], 'required','message'=>'{attribute} 必须'],

标量查询

Post::find()->select('title')->where(['user_id' => $userId])->scalar();

生成 SQL:

SELECT `title` FROM `post` WHERE `user_id` = 1

直接输出 title 的值。

如果 select('title') 不写的话,生成 SQL 是:

`SELECT * FROM `post` WHERE `user_id`=1`

直接输出 id 的值

表单验证,去除首尾空格:

public function rules()

{

return [[title', 'content'],'trim']];

}

单独为某个Action关闭 Csrf 验证

新建一个Behavior

use Yii;

use yii\base\Behavior;

use yii\web\Controller;

class NoCsrf extends Behavior

{

public $actions = [];

public $controller;

public function events()

{

return [Controller::EVENT_BEFORE_ACTION => 'beforeAction'];

}

public function beforeAction($event)

{

$action = $event->action->id;

if (in_array($action, $this->actions)) {

$this->controller->enableCsrfValidation = false;

}

}

}

然后在Controller中添加Behavior

public function behaviors()

{

return [

'csrf' => [

'class' => NoCsrf::className(),

'controller' => $this,

'actions' => [

'action - name'

]

]

];

}

LIKE 查询 单边加 %

['like', 'name', 'tester'] 会生成 name LIKE ' % tester % '。

['like', 'name', ' % tester', false] => name LIKE ' % tester'

$query = User::find()->where(['LIKE', 'name', $id . ' % ', false]);

SQL 随机抽取十名幸运用户

$query = new Query;

$query->select('ID, City,State,StudentName')

->from('student')

->where(['IsActive' => 1])

->andWhere(['not', ['State' => null]])

->orderBy(['rand()' => SORT_DESC])

->limit(10);

关于事务:

Yii::$app->db->transaction(function () {

$order = new Order($customer);

$order->save();

$order->addItems($items);

});

// 这相当于下列冗长的代码:

$transaction = Yii::$app->db->beginTransaction();

try {

$order = new Order($customer);

$order->save();

$order->addItems($items);

$transaction->commit();

} catch (\Exception $e) {

$transaction->rollBack();

throw $e;

}

批量插入数据

第一种方法

$model = new User();

foreach ($data as $attributes) {

$_model = clone $model;

$_model->setAttributes($attributes);

$_model->save();

}

第二种方法

$model = new User();

foreach ($data as $attributes) {

$model->isNewRecord = true;

$model->setAttributes($attributes);

$model->save() && $model->id = 0;

}

URL操作

获取url中的host信息

Yii::$app->request->getHostInfo()

获取url中的路径信息(不包含host和参数):

Yii::$app->request->getPathInfo()

获取不包含host信息的url(含参数):

# /public/index.php?r=news&id=1

Yii::$app->request->url

或者

Yii::$app->request->requestUri

只想获取url中的参数部分

# r=news&id=1

Yii::$app->getRequest()->queryString;

获取某个参数的值,比如id

Yii::$app->getRequest()->getQuery('id'); //get parameter 'id'

获取(除域名外的)首页地址

# /public/index.php

Yii::$app->user->returnUrl;

获取Referer

Yii::$app->request->headers['Referer']

或者

Yii::$app->getRequest()->getReferrer()

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

phpyii框架倒叙_YII框架常用技巧总结相关推荐

  1. phpyii框架倒叙_Yii框架入口文件index.php功能分

    在YII代码自动生成工具生成的项目下,有一个index.php文件.这个文件是整个基于yii框架的web项目的启动入口文件.默认情况下,访问路径为:http://hostname:port/webro ...

  2. phpyii框架倒叙_快速入门php框架(Lumen thinkphp Yii)

    打算从三个比较普遍常用的框架带领那些初入门的小伙伴(老鸟勿喷)快速上手一个框架,期间会分享一些自己的编码习惯,和代码思路,这三个框架分别是thinkphp(简单的轻量级国产框架).Lumen(为速度而 ...

  3. 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用

    网络爬虫开发常用框架 Scrapy 爬虫框架 Crawley 爬虫框架 PySpider 爬虫框架 Scrapy 爬虫框架的使用 搭建 Scrapy 爬虫框架 1. 安装 Twisted 模块 2. ...

  4. mysql ef6 您的项目引用了最新版_您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧...

    转载至: http://www.cnblogs.com/Imaigne/p/4153397.html 您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mys ...

  5. 【深度学习】深入浅出神经网络框架的模型元件(常用层和卷积层)

    [深度学习]深入浅出神经网络框架的模型元件(常用层和卷积层) 文章目录 1 常用层1.1 Dense1.2 Activation层1.3 Dropout1.4 Flatten 2 卷积层2.1 Cov ...

  6. 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  7. kotlin框架Anko的使用及常用的项目配置

    kotlin框架Anko的使用及常用的项目配置 之前的几篇文章重复的讲了一些项目的基础配置,这一节就让我们把之前的那些抽取出来,单独的写一篇短文,之后的文章我们就直接使用这个配置就可以啦 创建我们的项 ...

  8. html网页制作浮动框架,浮动框架在网页制作中使用技巧.doc

    浮动框架在网页制作中使用技巧 浮动框架在网页制作中使用技巧摘要:首先介绍了浮动框架的应用特点,然后结合实际的使用技巧介绍了在浮动框架中:可以制作与其它页面之间的链接,设置浮动框架的滚动条及区域的颜色, ...

  9. VUE常用UI组件插件及框架-vue前端UI框架收集

    UI组件及框架 element - 饿了么出品的Vue2的web UI工具套件 mint-ui - Vue 2的移动UI元素 iview - 基于 Vuejs 的开源 UI 组件库 Keen-UI - ...

  10. 二十三、【开源】EFW框架Web前端开发之常用组件(FusionCharts图表、ReportAll报表等)

    回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan.baidu. ...

最新文章

  1. 大小端以及字节序的问题
  2. [声明]关于春节回家期间不能更新Blog的说明
  3. Mysql 源码安装
  4. android 之 使用显示意图和隐式意图完成Activity的跳转
  5. maven引用servlet_解决Maven 项目报错 java.httpservlet和synchronized使用方法
  6. jquery控制只监听数字_如何在jQuery中监听并保持单击?
  7. linux内存分段管理,Linux內存管理之分段機制
  8. delphi memo 查找字符 下行插入_VBA实践+用编程代码为PDF文档插入书签
  9. hsql mybatis 表不存在_Mybatis-plus 查询数据库表时抛异常提示数据库表不存在
  10. python给定dna等分成两个序列_Biopython序列
  11. 如何在python同一行内输入若干个数?
  12. 组合公式计算机,(最新整理)排列与组合的概念与计算公式
  13. 候选码、主码、外码、全码、超码
  14. 蚁群算法(ACO)最短路径规划(MATLAB)
  15. Email营销相关名词解释:PEM,UCE,Opt-in,Double Opt-In,Opt-out
  16. 电容选型及常用值与作用的学习
  17. MathType在word中的安装使用方法(要配合microsoft公式3.0才能使用)(ps:弄得不好可能造成word中Ctrl+V失灵)
  18. 嵌入式的发展前景如何?
  19. redis跟memcached有啥子区别
  20. MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)

热门文章

  1. 2021-01-22 LR照片处理逻辑及曝光调整中的基本审美
  2. 190220每日一句
  3. TinyMind 和机器之心收藏
  4. Atitit 文件读取规范 目录 1.1. 以fgetss取代fgets读取一行并过滤掉 HTML 和 PHP 标记。 1 1.2. 3. 以二进制读取 fread取代fgets 1 1.3. 4.
  5. Atitit usrQC27模块化的规范模块化法 v4 t77 目录 1. 模块化层级(软件项目 1 1.1. 子项目》命名空间package机制》类》类文件》方法函数级别》语句 1 2. 常见的
  6. Atitit 趋势管理之道 attilax著
  7. Atitit.uke 团队建设的组织与运营之道attilax总结
  8. PAIP.img ROM文件提取APK
  9. 操作系统如何恢复到原先状态
  10. Julia: 奇技淫巧......