1 .request的获取方式
$request = Yii::$app->request;
2. get参数的获取方式
$id = $request->get('id',1);获取get的id,默认1
3 .post参数的获取方式
$id = $request->post('id',1); 获取post的id,默认1
4. 判断是否为get或者post的请求
$request->isGet; $request->isPost ; 是为true,否为false
5. 获取用户
ip $request->userIP;
6. 将后台数据传递到前台
return $this->renderPartial('index',$data); return $this->render('index',$data); $data表示传递到前台的数据
7. compact 合并数组
8. 前台
将$str的html标签转为实体。= echo \Yii\helpers\Html::process($str)?>去掉html标签
9. 不自己定义父模板,不适用原模板
控制器方法:
public $layout = 'home';//用属性的方法定义父模板
public function actionIndex(){
return $this->render('index');
}
在view/layout/写一个home.php,自定义一个父模板
10. 在不用的页面之间互相引用
=$this->render('about'); ?>
11. 模型类
namespace app\models;
use \Yii\db\ActiveRecord;
class Article extends ActiveRecord{}
在控制器中加入模型方法
use app\models\Article;
使用封装好的操控数据库的方法
$xx = Article::findBySql(sql语句)->all();
12. 查询数据
查询单条数据:id = 5
$data = Article::find()->where(['id'=>5])->one(); 此处的$data是一个对象
数组: $data = Article::find()->asArray()->all(); 此处的$data是一个数组
将返回的多条数据分段取出,如得到1000条,分别以10条的形式展示,以减少内存占用的方法:
foreach(Article::find()->batcjh(10) as $article)){
$data[] = $article;
}
like条件 ,andWhere , in条件, !=
where 查询: where(['and' , [ 'like' , 'cas' , $key.'%' , false ] , [ 'is_delete' => 0] ])->andWhere([ '>' , 'add' , $time])->andWhere(['in' , 'id' , [232,467,14,19,52])->andwhere([ '!=' , 'parent', 0 ])
left 查询:
$model = (new Query())
->select( ' A.xx , A.xx , B.xx, B.xx , C.xx' )
->from(' ti as A')
->leftJoin( ' t2 as B ' , ' ti.id = t2.id ')
->leftJoin(' t3 as C ' , ' ti.id = t3.id ')
->where($where)
13. 添加数据到数据库
在控制器的方法中
$Article = new Article();
$Article->字段1 = '值';
$Article->字段2 = '值';
$data = $Article->insert();或者$data = $Article->save();
以上两种方法返回的都是true或者false;插入到表article;返回插入的数据的is的方法: $id = $Article->attributes['id'];
14. 修改数据库
//修改记录
$article = Article::findOne(11); //查询id为11的这条数据
$article->title = 'xxxx';
$article->num = 10;
$data = $article->update(); 或者$data = $article->save();
//修改查看次数(单个字段)
$data = $Article::updateAllCounters(['num'=>1],['id'=>8]); 修改id为8的这条数据
$data = $this->updateAll(['name'=>'lisa','sex=>0'] , ['ok'=>1] , '额外条件' ) ;
↑字段值 ↑where ↑order
更新数据库,字段自增+1,2018-6-30更新
$result = Yii::$app->db->createCommand()->update('app_xwnew_items',['price' =>new Expression('price+1')], "item_id=".$item_id)->execute();
15. 删除数据
$article = Article::findOne(16);
$article = Article::find()->where(['id'=>15])->one(); $result = $article->delete();
$article = Article::find()->where(['id'=>15])->all(); $result = $article[0]->delete();
$result &#61; Article::deleteAll(&#39;id>:id And num<:num&#39;,[&#39;:id&#39;&#61;>13,&#39;:num&#39;&#61;>100]);
16. 多表关联查询
文章分类表&#xff08;分类id&#xff09;->文章表 &#xff0c;首先在models中简历一个分类表的模型类
$category &#61; Category::findOne(1);
$result &#61; $category->hasMany(Article::className(),[&#39;cate_id&#39;&#61;>&#39;id&#39;])->all(); hasOne方法则是一对一
17. with的使用
$result &#61; Article::find()->with(&#39;category&#39;)->asArray()->all(); 其实是用了article模型类中的getcategory()方法。
public function getCategory(){
$category &#61; $this->hasOne(Category::className(),[&#39;id&#39;&#61;&#39;cate_id&#39;])->asArray();
return $category;
}
18. 输出sql语句的方法
$retuslt->createCommand()->getRawSql();
19. 模型类中的查询 :
$this->find()->where([&#39;a&#39;&#61;>1])->andwhere([&#39;>&#39;],&#39;add_time&#39;,123456)->one();
20. Yii获取验证码的方法
控制器中 &#xff1a;
$val &#61; new \common\mobles\ValidateCode();
$val->doimg();
Yii::$app->session[&#39;vakudatacode&#39;] &#61; $val->getCode();
21. Yii2中的表单令牌验证加入防止出现404错误
在表单中加入request->csrfToken?>"/>
22. 模型类中只查询某些字段
$this->find()->select(&#39;字段1&#xff0c;字段2&#39;)->one();
23. 设置头部信息
$res &#61; Yii::$app->response;
$res->statusCode &#61; &#39;404&#39;; //设置访问状态
$res->headers->add(&#39;pragma&#39;,&#39;no-cache&#39;); //设置头部信息
$res->headers->set(&#39;pragma&#39;,&#39;max-age&#61;5&#39;); //设置头部信息
$res->header->remove(&#39;pragma&#39;); //设置头部信息
跳转
$res->headers->add(&#39;location&#39;,&#39;http://www.baidu.com&#39;);
$this->redirect(&#39;http://www.baidu.com&#39;,302);
文件下载
$res->headers->add(&#39;content-disposition&#39;,&#39;attachement:filename&#61;"a.jpg"&#39;);
$res->sendFile(&#39;./b.jpg&#39;);
24. session应用组件&#xff0c;session文件在phpstudy/tmp/tmp
$session &#61; Yii::$app->session;
if($session->isActive){ //判断session是否开启
echo &#39;session is actve&#39;;
}
$session->set(&#39;user&#39;, &#39;张三&#39;); //设置session
$session->get(&#39;user&#39;); //获取session
$session->remove(&#39;user&#39;); //删除session
25. COOKIE应用组件的使用
首先在每个控制器的命名空间下加上 use Yii\web\COOKIE
$COOKIE &#61; Yii::$app->response->COOKIE;
$COOKIE_array &#61; array(&#39;name&#39;&#61;>&#39;user&#39; , &#39;value&#39;&#61;>&#39;zhangsan&#39;);
$COOKIE->add(new COOKIE($COOKIE_data)); //重复设置会覆盖
$COOKIE->remove(&#39;name&#39;);
$COOKIE &#61; Yii::$app->request->COOKIEs;
echo $COOKIE->getValue(&#39;user&#39;,20);
$COOKIE &#61; Yii::$app->request->COOKIEs; //只读
$COOKIE &#61; Yii::$app->response->COOKIEs; //可写入
26. 使用common文件夹下的类的方法
在common下的init.php入口配置文件中引入 如&#xff1a;qq\QC.class.php
在项目的控制器中使用 new\QC();
27. db直接执行sql
$db &#61; Yii::$app->db;
$a &#61; $db->createCommand($sql)->query(); //查询
$b &#61; $db->createCommand($sql)->execute(); //其他
28. Yii2设置缓存&#xff0c;将查询出来的数据保存到front/runtime/cache/xxx
方法&#xff1a;$cache &#61; Yii::$app->cache;
$cache->("company_detail_".$_POST[&#39;&#39;id] , $arr , 时间秒);
读取&#xff1a;$cache->get( "company_detail_".$id ); 读取出来的是一个完成的$arr
29. Yii2页面引入js文件
&#61;Html::jsFile(&#39;public.plug/xxx/xxx.js&#39;)?>
30. 创建事务
$transaction &#61; Yii::$app->db->beginTransaction();
提交事务
$transaction->commit();
回滚
$transaction->rollback();
一般使用方法&#xff1a;
try{
if(false){
throw new \Exception(&#39;这里填写异常信息&#xff0c;如&#xff1a;sorry,保存失败,请稍后再试!&#39;);
}
}catch (\Exception $e) {
$transaction->rollBack();
}