YII框架常用技巧总结_第1页
YII框架常用技巧总结_第2页
YII框架常用技巧总结_第3页
YII框架常用技巧总结_第4页
YII框架常用技巧总结_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

获取当前Controllername和actionname(在控制器里面使用)

echo$this-

echo$this-action-

控制器获取当前模块

$this-module-id

不生成label标签

//ActiveForm类

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

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

Yii::$app-request-rawBody;

防止SQL和Script注入:

useyii\helpers\Html;

useyii\helpers\HtmlPurifier;

echoHtml::encode($view_hello_str)//可以原样显示script/script代码

echoHtmlPurifier::process($view_hello_str)//可以过滤掉script/script代码

大于、小于条件查询

//SELECT*FROM`order`WHERE`subtotal`200ORDERBY`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');

方式二:

returnUser::find()-select('name')-asArray()-column();

打印数据:

//引用命名空间

useyii\helpers\VarDumper;

//使用

VarDumper::dump($var);

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

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

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

publicfunctionrules()

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],

SQLisnotnull条件查询

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

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

$query=newQuery;

$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是否存在

publicfunctionrules()

return[

[['point_template_id'],'exist',

'targetClass'=PointTemplate::className(),

'targetAttribute'='id',

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

Yii给必填项加星

div.requiredlabel:after{

content:

"*";

color:

red;

执行SQL查询并缓存结果

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

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

returnCollection::findOne(['style_id'=$styleId]);

},self::SECONDS_IN_MINITUE*10);

场景:

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

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

目标:提高代码复用

此处/可以做成一个配置

示例:

User.php

classUserextends\yii\db\ActiveRecord

publicfunctionextraFields()

$fields=parent::extraFields();

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

returnempty($this-avatar_path)'可以设置一个默认的头像地址':'/'.$this-avatar_path;

return$fields;

ExampleController.php

classExampleControllerextends\yii\web\Controller

publicfunctionactionIndex()

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

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

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

Model里面rules联合唯一规则

复制代码代码如下:[['store_id','member_name'],'unique','targetAttribute'=['store_id','member_name'],'message'='ThecombinationofStoreIDandMemberNamehasalreadybeentaken.'],

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的值

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

publicfunctionrules()

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

单独为某个Action关闭Csrf验证

新建一个Behavior

useYii;

useyii\base\Behavior;

useyii\web\Controller;

classNoCsrfextendsBehavior

public$actions=[];

public$controller;

publicfunctionevents()

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

publicfunctionbeforeAction($event)

$action=$event-action-

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

$this-controller-enableCsrfValidation=false;

然后在Controller中添加Behavior

publicfunctionbehaviors()

return[

'csrf'=[

'class'=NoCsrf::className(),

'controller'=$this,

'actions'=[

'action-name'

LIKE查询单边加%

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

['like','name','%tester',false]=nameLIKE'%tester'

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

SQL随机抽取十名幸运用户

$query=newQuery;

$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=newOrder($customer);

$order-save();

$order-addItems($items);

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

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

try{

$order=newOrder($customer);

$order-save();

$order-addItems($items);

$transaction-commit();

}catch(\Exception$e){

$transaction-rollBack();

throw$e;

批量插入数据

第一种方法

$model=newUser();

foreach($dataas$attributes){

$_model=clone$model;

$_model-setAttributes($attributes);

$_model-save();

第二种方法

$model=newUser();

foreach($dataas$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()

获取不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论