phpyii框架倒叙_YII框架常用技巧总结
本文实例总结了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框架常用技巧总结相关推荐
- phpyii框架倒叙_Yii框架入口文件index.php功能分
在YII代码自动生成工具生成的项目下,有一个index.php文件.这个文件是整个基于yii框架的web项目的启动入口文件.默认情况下,访问路径为:http://hostname:port/webro ...
- phpyii框架倒叙_快速入门php框架(Lumen thinkphp Yii)
打算从三个比较普遍常用的框架带领那些初入门的小伙伴(老鸟勿喷)快速上手一个框架,期间会分享一些自己的编码习惯,和代码思路,这三个框架分别是thinkphp(简单的轻量级国产框架).Lumen(为速度而 ...
- 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用
网络爬虫开发常用框架 Scrapy 爬虫框架 Crawley 爬虫框架 PySpider 爬虫框架 Scrapy 爬虫框架的使用 搭建 Scrapy 爬虫框架 1. 安装 Twisted 模块 2. ...
- mysql ef6 您的项目引用了最新版_您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧...
转载至: http://www.cnblogs.com/Imaigne/p/4153397.html 您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mys ...
- 【深度学习】深入浅出神经网络框架的模型元件(常用层和卷积层)
[深度学习]深入浅出神经网络框架的模型元件(常用层和卷积层) 文章目录 1 常用层1.1 Dense1.2 Activation层1.3 Dropout1.4 Flatten 2 卷积层2.1 Cov ...
- 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- kotlin框架Anko的使用及常用的项目配置
kotlin框架Anko的使用及常用的项目配置 之前的几篇文章重复的讲了一些项目的基础配置,这一节就让我们把之前的那些抽取出来,单独的写一篇短文,之后的文章我们就直接使用这个配置就可以啦 创建我们的项 ...
- html网页制作浮动框架,浮动框架在网页制作中使用技巧.doc
浮动框架在网页制作中使用技巧 浮动框架在网页制作中使用技巧摘要:首先介绍了浮动框架的应用特点,然后结合实际的使用技巧介绍了在浮动框架中:可以制作与其它页面之间的链接,设置浮动框架的滚动条及区域的颜色, ...
- VUE常用UI组件插件及框架-vue前端UI框架收集
UI组件及框架 element - 饿了么出品的Vue2的web UI工具套件 mint-ui - Vue 2的移动UI元素 iview - 基于 Vuejs 的开源 UI 组件库 Keen-UI - ...
- 二十三、【开源】EFW框架Web前端开发之常用组件(FusionCharts图表、ReportAll报表等)
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan.baidu. ...
最新文章
- 大小端以及字节序的问题
- [声明]关于春节回家期间不能更新Blog的说明
- Mysql 源码安装
- android 之 使用显示意图和隐式意图完成Activity的跳转
- maven引用servlet_解决Maven 项目报错 java.httpservlet和synchronized使用方法
- jquery控制只监听数字_如何在jQuery中监听并保持单击?
- linux内存分段管理,Linux內存管理之分段機制
- delphi memo 查找字符 下行插入_VBA实践+用编程代码为PDF文档插入书签
- hsql mybatis 表不存在_Mybatis-plus 查询数据库表时抛异常提示数据库表不存在
- python给定dna等分成两个序列_Biopython序列
- 如何在python同一行内输入若干个数?
- 组合公式计算机,(最新整理)排列与组合的概念与计算公式
- 候选码、主码、外码、全码、超码
- 蚁群算法(ACO)最短路径规划(MATLAB)
- Email营销相关名词解释:PEM,UCE,Opt-in,Double Opt-In,Opt-out
- 电容选型及常用值与作用的学习
- MathType在word中的安装使用方法(要配合microsoft公式3.0才能使用)(ps:弄得不好可能造成word中Ctrl+V失灵)
- 嵌入式的发展前景如何?
- redis跟memcached有啥子区别
- MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)
热门文章
- 2021-01-22 LR照片处理逻辑及曝光调整中的基本审美
- 190220每日一句
- TinyMind 和机器之心收藏
- Atitit 文件读取规范 目录 1.1. 以fgetss取代fgets读取一行并过滤掉 HTML 和 PHP 标记。	1 1.2. 3. 以二进制读取 fread取代fgets	1 1.3. 4.
- Atitit usrQC27模块化的规范模块化法 v4 t77 目录 1. 模块化层级(软件项目	1 1.1. 子项目》命名空间package机制》类》类文件》方法函数级别》语句	1 2. 常见的
- Atitit 趋势管理之道 attilax著
- Atitit.uke 团队建设的组织与运营之道attilax总结
- PAIP.img ROM文件提取APK
- 操作系统如何恢复到原先状态
- Julia: 奇技淫巧......