yii2 日志


原文地址:http://blog.csdn.net/woaixhq/article/details/46364223

 

對於yii的研究,還沒有那么深刻,之所以在這種情況下寫,還是考慮到了后來入門人沒有中文資料,而又無可下手的尷尬境地。希望對新手和我自己多一份幫助吧。總結幾個自己的經驗吧。環境的配置我就不做解釋了。這個可以從網上找。

1關於定義系統參數的問題

在項目中config的目錄中,分別有params-local.php和params.php的倆個php文件,這倆個文件了可以設置你所需要的 全局的參數。具體目錄是放在common、frontend、backend的config里,看你所需了。這倆個文件的區別,在我看來,就是是否是本地 化的區別。如果有參數需要根據網站部署環境而改變,最好還是放在params-local.php里,params-local.php最好不要放在項目 版本庫里。params.php里的參數還是要存放比較穩定的參數。另外,在這倆個里邊設置了參數,調用是沒區別的。舉個例子:

在params-local.php中

  1. <?php  
  2. return [  
  3.     'front_url' => 'http://www.aaa.cn/'  
  4. ];  

在params.php中

  1. <?php  
  2.   
  3. return [  
  4.     'adminEmail' => 'admin@example.com',  
  5. ];  

在項目中調用都可以以Yii::$app->params[' adminEmail']來調用


2,創建自己的小組件(其實就是可以把公用的方法組合一下。方便程序調用)

在common下創建components目錄,在此目錄下新建Functions.php文件。Function類代碼如下

  1. <?php  
  2.   
  3. namespace common\components;  
  4.   
  5. use Yii;  
  6. use yii\base\Component;  
  7.   
  8. class Functions extends Component {  
  9.   
  10.     public function test($t="") {  
  11.         echo $t;  
  12.     }  
  13.      
  14. }  

此類必須繼承Component。

然后再common/config/main.php中的components節點,增加

  1. 'functions' => [  
  2.             'class' => 'common\components\Functions'  
  3.         ]  
加完之后,代碼結構形如
  1. <?php  
  2. return [  
  3.     'timeZone' => 'Asia/Shanghai',  
  4.     'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',  
  5.     'components' => [  
  6.         'cache' => [  
  7.             'class' => 'yii\caching\FileCache',  
  8.         ],  
  9.         'urlManager' => [  
  10.             'enablePrettyUrl' => true,  
  11.             'showScriptName' => false,  
  12.         ],  
  13.         'functions' => [  
  14.             'class' => 'common\components\Functions'  
  15.         ]  
  16.     ],  
  17.   
  18. ];  

這時候調用就簡單了。利用Yii::$app->functions->test("aaa");


3.ActiveForm開發時候需要的問題

對於ActiveForm的驗證,實際使用當中總結出一個問題:

<?= $form->field($model, 'description', ['template' =& gt; '{input}'])->textInput() ?>對於這段代碼尤其需要注意,template里千萬不能出現不完整標簽,否 則驗證失效,即['template' => '<td>{input}</td>']這樣,驗證是不起作用的,但是 ['template' => '<table><tr><td>{input}</td>& lt;/tr></table>']這樣是有效的。雖然不會這樣布局,但還是希望大家能注意。布局還是div布局


4關於查詢的一些總結

1)Adv::find()->where(['pos_id'=>1])->andwhere(["status"=> 0])->all();   //查詢返回全部 // ->one()  查詢1個結果  // ->count()  獲取數量
2)查詢一個結果的時候,也可以這樣實現
Adv::findOne($id);或者Adv::findOne($condition);
3) 多表聯查 
$model=new Adv();
$model->find()->join(‘LEFT JOIN‘,‘adv_pos‘,‘adv_pos.id=adv.pos_id‘)
->select()->//字段
            ->where(‘adv.status‘=>0)
            ->andwhere(‘pos_id=1‘)
            ->one();
4)like查詢  andFilterWhere 例如
$order->andFilterWhere(['like','product_title',  $product_title]);
也可以對大於,小於進行這樣的操作
注意一個篩選查詢
$query->andFilterWhere(['like', 'ORG_CODE', $this->ORG_CODE])
      ->andFilterWhere(['between', 'CREATED_AT', $this->START_AT, $this->END_AT]);//這樣是錯誤的
$query->andFilterWhere(['like', 'ORG_CODE', $this->ORG_CODE])
      ->andFilterWhere(['and', 'CREATED_AT', $this->START_AT, $this->END_AT]);//正確


5日志的用法

1)文件日志緩存

main.php中components增加

  1. 'log' => [  
  2.             'traceLevel' => YII_DEBUG ? 3 : 0,  
  3.             'targets' => [  
  4.                 [  
  5.                     'class' => 'yii\log\FileTarget',  
  6.                     'levels' => ['error', 'warning'],  
  7.                 ],  
  8.                 //在原配置的基礎上,增加以下配置(新增一個target)  
  9.                 [  
  10.                    'class' => 'yii\log\FileTarget',  
  11.                    'levels' => ['error', 'warning','info'],  
  12.                    'logVars'=>[],  
  13.                    //表示以yii\db\或者app\models\開頭的分類都會寫入這個文件  
  14.                    'categories'=>['yii\db\*','app\models\*'],  
  15.                    //表示寫入到文件sql.log中年月日記錄日志  
  16.                    'logFile'=>'@runtime/../logs/sql/sql.log'.date('Ymd'),  
  17.                ],  
  18.             ],  
  19.               
  20.         ],  

項目中調用

  1. $time = microtime(true);   
  2. $log = new FileTarget();   
  3. $log->logFile = Yii::$app->getRuntimePath() . '/logs/test.log'; //<span style="font-family: Arial, Helvetica, sans-serif;">getRuntimePath獲取runtime路徑</span>  
  4. $log->messages[] = ['test',1,'test',$time]; //第一個參數:輸出的信息,第二個參數1:error,2:warning,3第三個可以告訴位置,第四個時間  
  5. $log->export();   




文章總結到這里,后續會繼續更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM