原文地址: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中
- <?php
- return [
- 'front_url' => 'http://www.aaa.cn/'
- ];
在params.php中
- <?php
- return [
- 'adminEmail' => 'admin@example.com',
- ];
在項目中調用都可以以Yii::$app->params[' adminEmail']來調用
2,創建自己的小組件(其實就是可以把公用的方法組合一下。方便程序調用)
在common下創建components目錄,在此目錄下新建Functions.php文件。Function類代碼如下
- <?php
- namespace common\components;
- use Yii;
- use yii\base\Component;
- class Functions extends Component {
- public function test($t="") {
- echo $t;
- }
- }
此類必須繼承Component。
然后再common/config/main.php中的components節點,增加
- 'functions' => [
- 'class' => 'common\components\Functions'
- ]
- <?php
- return [
- 'timeZone' => 'Asia/Shanghai',
- 'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
- 'components' => [
- 'cache' => [
- 'class' => 'yii\caching\FileCache',
- ],
- 'urlManager' => [
- 'enablePrettyUrl' => true,
- 'showScriptName' => false,
- ],
- 'functions' => [
- 'class' => 'common\components\Functions'
- ]
- ],
- ];
這時候調用就簡單了。利用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增加
- 'log' => [
- 'traceLevel' => YII_DEBUG ? 3 : 0,
- 'targets' => [
- [
- 'class' => 'yii\log\FileTarget',
- 'levels' => ['error', 'warning'],
- ],
- //在原配置的基礎上,增加以下配置(新增一個target)
- [
- 'class' => 'yii\log\FileTarget',
- 'levels' => ['error', 'warning','info'],
- 'logVars'=>[],
- //表示以yii\db\或者app\models\開頭的分類都會寫入這個文件
- 'categories'=>['yii\db\*','app\models\*'],
- //表示寫入到文件sql.log中年月日記錄日志
- 'logFile'=>'@runtime/../logs/sql/sql.log'.date('Ymd'),
- ],
- ],
- ],
項目中調用
- $time = microtime(true);
- $log = new FileTarget();
- $log->logFile = Yii::$app->getRuntimePath() . '/logs/test.log'; //<span style="font-family: Arial, Helvetica, sans-serif;">getRuntimePath獲取runtime路徑</span>
- $log->messages[] = ['test',1,'test',$time]; //第一個參數:輸出的信息,第二個參數1:error,2:warning,3第三個可以告訴位置,第四個時間
- $log->export();
文章總結到這里,后續會繼續更新。
