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

yii2.0的mvc中的model

2016-07-07 11:26 465 查看
model的基类在vendor\yiisoft\yii2\base\model文件中
class Model extends Component implements IteratorAggregate, ArrayAccess, Arrayable
它继承了组件这个类(component)并实现了IteratorAggregate,arrayAccess,Arrayable三个接口
IteratorAggregate:迭代器(一种设计模式)
在models文件夹下创建UserForm.php文件
<?php
 namespace  app\models;
use        yii\base\Model;
class UserForm extends Model{
public $username;
public $password;
}
在controllers文件夹下创建UserController.php文件
<?php
namespace  app\controllers;
use        yii\web\Controller;
use        app\models\UserForm;
class UserController extends Controller{
public function actionLogin(){
$model=new UserForm();
foreach($model as $k=>$c){
echo $k;
}
}
}
然后尝试访问
e37c
yii.basic.com/user/login.html
model中的属性标签:具体适用场景不明。。。。
在base/model中  有public function attributeLabels()这么一个方法
在Model的子类UserForm中重新定义这个方法
<?php namespace  app\models;use        yii\base\Model;class UserForm extends Model{public $username;public $password;/** 属性标签配置** */public function attributeLabels(){return ['username'=>'登录账号','password'=>'输入密码'];}}
在UserController中显示属性标签
<?phpnamespace  app\controllers;use        yii\web\Controller;use        app\models\UserForm;class UserController extends Controller{public function actionLogin(){$model=new UserForm();/*  foreach($model as $k=>$c){echo $k;}*/foreach($model as $k=>$v){echo $model->getAttributeLabel($k); /* getAttributeLable
获得属性标签 */}}}
验证规则: 验证规则也在base/models中
<?php namespace  app\models;use        yii\base\Model;class UserForm extends Model{public $username;public $password;public $phone;public $repassword;/** 属性标签配置** */public function attributeLabels(){return ['username'=>'登录账号','password'=>'输入密码','phone'   =>'手机号'];}//数据验证规则public function rules(){return [/*要验证的字段包括有username,password,phone,message是报错提示,在控制器中调用$model->getErrors(),可获得报错信息*/[['username','password','phone'],'required','message'=>'必填字段'],//规定username的格式必须是邮箱格式['username','email','message'=>'登录账号格式错误'],//规定phone的格式必须全是数字// ['phone','number'],/*相等用compare比较方法, compareAttribute=>password比较是否和password相等'on'=>'register'表示在注册的场景下被调用   */['repassword','compare','compareAttribute'=>'password','message'=>'两次密码输入不一致','on'=>'register'],//required表示不能为空['phone','required','message'=>'手机号必填'],['repassword','required','message'=>'再次输入密码必填'],//配置正则的验证['phone','match','pattern'=>'/^1[3-8][0-9]{9}$/','message'=>'手机格式错误','on'=>'register'],['password','number','message'=>'密码格式错误']];}//场景配置,在控制器中设置场景的时候生效public function scenarios(){$scenarios=parent::scenarios();$scenarios['login']=['username','password'];    //登录场景,规定登录场景包含的字段$scenarios['register']=['username','password','repassword','phone']; //注册场景return $scenarios;}}
//在UserController.php中验证数据
<?phpnamespace  app\controllers;use        yii\web\Controller;use        app\models\UserForm; 
class UserController extends Controller{ 
public function actionLogin(){$model=new UserForm();$model->scenario='register';//场景设置为注册$model->username='yyt@qq.com';$model->password= '123' ;
//块赋值$model->attributes=['username'=>'adawd@164.com','password'=>111];//数据导出\Yii::$app->response->format=Response::FORMAT_JSON;return $model->toArray();
//属性 /* foreach($model as $k=>$c){ echo $k; }*/ //属性标签 /*foreach($model as $k=>$v){ echo $model->getAttributeLabel($k); }*/ /*数据验证 * */ if($model->validate()){ echo"success"; }else{ // var_dump($model->getErrors()); //得到字段的所有错误信息 var_dump($model->getFirstErrors());//得到字段的第一条错误信息 // var_dump($model->getFirstError('username'));//得到指定字段的错误信息 } } }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: