




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2026學年馬邊彝族自治縣三年級數學第一學期期末預測試題含解析
- 2024年云南省昆明市尋甸回族彝族自治縣三年級數學第一學期期末教學質量檢測模擬試題含解析
- 2024年湖南省懷化市部分縣區三上數學期末統考試題含解析
- 八年級語文上冊 第四單元 第17課 奇妙的克隆教師配套 新人教版課件
- 2025年執業護士考試應試技巧及試題答案
- 2025年執業護士考試實戰試題與答案
- 行政管理與社會影響力試題及答案
- 行政法學實踐與理論試題及答案
- 藥學領域中的研究趨勢與分析考題試題及答案
- 思維導圖2025年大學語文考試試題與答案全覽
- 2023人教版小學美術四年級上冊期末試卷含部分答案(三套)
- 宋教仁出生及偉大事跡及遇刺真相
- 承包經營食堂日控管周排查月調度記錄和管理表
- 陪診可行性報告
- 專題07-對比手法(解析版)初中現代文閱讀考點+答題技巧模板之記敘文
- 跨國公司的外匯風險管理分析-以TCL科技為例
- 心理健康教育課件《如何面對考試焦慮》
- 污水源熱泵方案
- 完整版江蘇省政府采購專家庫入庫考試題庫(1-4套卷)
- 《唐詩中的春夏秋冬》五年級下冊詩詞鑒賞一等獎課件
- 圍擋維修施工方案
評論
0/150
提交評論