yii2.0入门心得
来源:互联网 发布:python base64解码算法 编辑:程序博客网 时间:2024/06/05 14:45
yii2.0中的model的理解
学了php后发现直接用php写网站实在是繁琐,关键是全部都是代码重复的判断,所以博主尝试去使用框架开发,在慢慢深入学习yii框架之后,实在是感叹框架的灵活,yii框架的强大我就不拍马屁了,今天主要讲讲我对yii框架mvc中的model的理解吧,博主也是刚刚学,所以思路仅供参考,要是有什么不对的地方欢迎指点........
先讲讲model的用处是什么,model大概的理解是一组数据的集合,比如一个数据库的表里面的字段你也可以理解成是一组数据,一个提交的表单它也是一组数据,你可以为这些数据建立一个model类,然后在model里面对这些数据进行统一的操作,比如对用户提交的一个表单自然需要对数据进行安全验证,这是直接在model里面的rules方法里声明就好了,代码简介优雅了不止一点点啊.....
yii2框架的模型有两个类,我们写models的时候要继承这两个中的一个,ActiveRecord和Model,我们先来讲讲ActiveRecord这个基类吧
<?phpnamespace common\models;use yii\db\ActiveRecord;class User extends ActiveRecord{
public static function tableName(){ return '{{%user}}'; } //验证规则 public function rules(){ return [ ['username','checkName','skipOnEmpty'=>false], ['password','string','min'=>6,'tooShort'=>'密码的长度不能小于6位','skipOnEmpty'=>false,'when' => function($model){ return ($model->isNewRecord || $model->password != "");}], ['status','in','range'=>[0,1],'message'=>'非法操作'], ]; } //自定义验证函数 public function checkName($attribute,$params){ if(!preg_match("/^[\w]{2,30}$/", $this->$attribute)){ $this->addError($attribute,'用户名必须是2~30的数字或字母'); }else if(self::find()->where(['username'=>$this->$attribute])->andwhere(['!=','id',$this->id])->count()>0){ $this->addError($attribute,'用户名已存在'); } } //在模型保存数据库时执行的函数 public function beforeSave($insert){ if(parent::beforeSave($insert)){ if($this->isNewRecord){ $this->date = $this->login_date = time(); } $this->date = time(); if(empty($this->password)){ unset($this->password); }else{ $this->password = md5($this->password); } return true; } return false; } //删除函数 public static function deleteIn($selected){ $data=new arrary(); foreach($selected as $va){ if($va==self::SUPER_ID){ continue; } $data[] = (int)$va; } return self::deleteAll(['id'=>$data]); }}
这是我刚刚写的一个项目的一个继承ActiveRecord 的model
use yii\db\ActiveRecord;,我们先要use 一下基类,这就是yii框架的封装好的,
class User extends ActiveRecord我们写的类就要继承他们,注意类名最好与表名相同
public static function tableName(){ return '{{%user}}'; }既然是ActiveRecord是对数据库表的数据的操作,所以第一件事是什么?!当然是声明表名!
public function rules(){ return [ ['username','checkName','skipOnEmpty'=>false], ['password','string','min'=>6,'tooShort'=>'密码的长度不能小于6位','skipOnEmpty'=>false,'when' => function($model){ return ($model->isNewRecord || $model->password != "");}], ['status','in','range'=>[0,1],'message'=>'非法操作'], ]; }
这个就是规则函数,我们要返回一个数组,数组里面写满了对数据库的数据的约束,比如password字段你一定要是长为6的字符串等等.....不过具体怎么写验证你们还是去看文档吧
这个类不需要事先写字段,这些变量就是数据库表里面的字段,yii框架会自动识别(手动强大......)
['username','checkName','skipOnEmpty'=>false],
//自定义验证函数 public function checkName($attribute,$params){ if(!preg_match("/^[\w]{2,30}$/", $this->$attribute)){ $this->addError($attribute,'用户名必须是2~30的数字或字母'); }else if(self::find()->where(['username'=>$this->$attribute])->andwhere(['!=','id',$this->id])->count()>0){ $this->addError($attribute,'用户名已存在'); } }
我们还可以自定义验证函数,具体代码就如下,当验证username的时候它就会自动执行checkName函数,当发现字段非法的时候只需要
$this->addError($attribute,'用户名必须是2~30的数字或字母');这样子就可以了,
这个既然是与表连接模型,自然对这个数据库表的所有操作它也给你封装好了撒,其实这也是它和另一个基类的区别哦,另一个model就是少了与数据库的操作(个人理解)
下面我给你列举几个函数吧,具体就参考文档吧,是在写不完我们主要是入门
删除数据
User::findOne(1)->delete();
User::deleteAll('id'=>2);
保存数据
User::save();
public function beforeSave($insert){ if(parent::beforeSave($insert)){ if($this->isNewRecord){ $this->date = $this->login_date = time(); } $this->date = time(); if(empty($this->password)){ unset($this->password); }else{ $this->password = md5($this->password); } return true; } return false; }在保存数据之前执行的函数,比如你在保存数据的数据你现在做一些事情,你只要声明这个函数,它就会在save函数调用的时候自动调用挺好的
//$model=User::find()->where('id=:id',[':id'=>2])->one();防注入
这是基本的查找方法
ActiveRecord的基本使用
当我们activerecord的model写好了我们要就要使用它撒,话不多说上代码<?phpnamespace backend\controllers;use yii;use common\models\User;use yii\data\Pagination;class UserController extends AdminController{ public $layout='empty'; public function actionIndex(){ $model = User::find(); $pagination = new Pagination(['totalCount'=>$model->count(),'pageSize'=>3]); $result = $model->offset($pagination->offset)->limit($pagination->limit)->all(); return $this->render('index',['result'=>$result,'pagination'=>$pagination]); } public function actionAdd(){ $model = new User(); if(yii::$app->request->ispost && $model->load(yii::$app->request->post()) && $model->validate()){ if( $model->save()){ yii::$app->session->setFlash('success','添加用户成功'); }else{ yii::$app->session->setFlash('error','添加用户失败'); } return $this->redirect(['index']); } return $this->render('add',['model'=>$model]); } public function actionEdit(){ $id = yii::$app->request->get('id',0); $model = User::findOne($id); if(!$model){ return $this->redirect(['index']); } if(yii::$app->request->ispost && $model->load(yii::$app->request->post()) &&$model->validate()){ if( $model->save()){ yii::$app->session->setFlash('success','编辑用户成功'); }else{ yii::$app->session->setFlash('error','编辑用户失败'); } return $this->redirect(['index']); } $model->password = ""; return $this->render('edit',['model'=>$model]); } public function actionDelete(){ $selected = yii::$app->request->post('selected',[]); if(User::deleteIn($selected)){ yii::$app->session->setFlash('success','删除用户成功'); }else{ yii::$app->session->setFlash('error','删除用户失败'); } return $this->redirect(['index']); }}这是我写的一个控制器类use common\models\User;同样的事情我们先要引用这个类public function actionAdd(){ $model = new User(); if(yii::$app->request->ispost && $model->load(yii::$app->request->post()) && $model->validate()){ if( $model->save()){ yii::$app->session->setFlash('success','添加用户成功'); }else{ yii::$app->session->setFlash('error','添加用户失败'); } return $this->redirect(['index']); } return $this->render('add',['model'=>$model]); }这是增加user表的一段代码,讲讲就很简单了首先要new一个对象出来,$model->load(yii::$app->request->post())然后把用户提交的表单数据给放到这个对象里面$model->validate()这个代码就是验证用户提交的数据是否合理的拉当用户提交的post满足rules规则时,它就会返回true然后直接save()它就被保存到数据库里面了,就是简单骚气
模型的另一个基类Model
仔细想想真的没啥好讲的了,因为 activerecord就是继承model的,它与activeRecord的区别就是它不是操作数据库的,所以它不用写表名,而且还需要申明变量,<?phpnamespace backend\models;use yii\base\Model;use yii\web\Cookie;use common\models\User;use Yii;class LoginForm extends Model{ //变量 public $username; public $password; public $verifyCode; public $remember; //规则 public function rules(){ return [ ['verifyCode','captcha','captchaAction'=>'login/captcha','message'=>'验证码错误'], [['password','remember'],'safe'], ['username' ,'validateAccount','skipOnEmpty'=>false], ]; } //自定义验证函数 public function validateAccount($attribute,$params){ if(!preg_match('/^\w{2,30}$/',$this->$attribute)){ $this->addError($attribute,'账号或密码错误'); }else if(strlen($this->password)<6){ $this->addError($attribute,'账号或密码错误'); }else{ $user = User::find()->where(['username'=>$this->$attribute,'status'=>1])->asArray()->one(); if(!$user || md5($this->password)!=$user['password']){ $this->addError($attribute,'账号或密码错误'); }else{ $this->user=$user; } } }}大致就是这样,博主的处女博,希望大家喜欢,并且一起学习,交流,大家一起提高嘛!欢迎私信......1 0
- yii2.0入门心得
- yii2.0使用心得
- YII2 的安装心得
- yii2 scenarios rules 使用心得
- yii2 elasticsearch5.4.1 使用心得
- yii2一些入门知识
- yii2入门实例
- Yii2.0入门--安装方法及目录结构
- Yii2.0自带验证码使用心得分享 [ 2.0 版本 ]
- Yii2 CURD使用心得(一)
- yii2 使用心得之表单及表单的类设置
- Yii2.x 中captcha 验证码使用的一些心得
- hibernate 入门心得
- oracle的入门心得
- Oracle 的入门心得
- Oracle 的入门心得
- Oracle 的入门心得
- Oracle的入门心得
- DAY26:leetcode #5 Longest Palindromic Substring
- 【TensorFlow】tf.concat的用法
- 计算机语言基础知识
- 08-CSS 相对定位 绝对定位 固定定位 z-index
- 大数据实战(上)——环境搭建
- yii2.0入门心得
- [node]express中app.use和app.get的区别及解析
- 找出一个字符串中最长的连续数字子串,输出该字符串及长度
- GNU
- Erdaicms旅游网站程序,微信扫码登录演示和示例程序
- 执行计划
- Android程序员必须掌握的知识点-多进程和多线程
- SqlServer目录
- JSONP跨域获取JSON数据(含jQuery方法)——李帅醒博客