yii2总结
对于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 commoncomponents; use Yii; use yiiaseComponent; class Functions extends Component { public function test($t="") { echo $t; } }
此类必须继承Component。
然后再common/config/main.php中的components节点,增加
"functions" => [ "class" => "commoncomponentsFunctions" ]加完之后,代码结构形如
<?php return [ "timeZone" => "Asia/Shanghai", "vendorPath" => dirname(dirname(__DIR__)) . "/vendor", "components" => [ "cache" => [ "class" => "yiicachingFileCache", ], "urlManager" => [ "enablePrettyUrl" => true, "showScriptName" => false, ], "functions" => [ "class" => "commoncomponentsFunctions" ] ], ];
这时候调用就简单了。利用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" => "yiilogFileTarget", "levels" => ["error", "warning"], ], //在原配置的基础上,增加以下配置(新增一个target) [ "class" => "yiilogFileTarget", "levels" => ["error", "warning","info"], "logVars"=>[], //表示以yiidb或者appmodels开头的分类都会写入这个文件 "categories"=>["yiidb*","appmodels*"], //表示写入到文件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();
文章总结到这里,后续会继续更新。