您的位置:首页 > 编程语言 > PHP开发

yii2总结

2015-06-04 17:21 609 查看
对于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['front_url']或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' => '{input}'])->textInput() ?>对于这段代码尤其需要注意,template里千万不能出现不完整标签,否则验证失效,即['template' => '<td>{input}</td>']这样,验证是不起作用的,但是['template' => '<table><tr><td>{input}</td></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();


文章总结到这里,后续会继续更新。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: