model的基类在vendor\yiisoft\yii2\base\model文件中
class Model extends Component implements IteratorAggregate, ArrayAccess, Arrayable
它继承了组件这个类(component)并实现了IteratorAggregate,arrayAccess,Arrayable三个接口IteratorAggregate:迭代器(一种设计模式)
在models文件夹下创建UserForm.php文件
<?phpnamespace 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; } } }然后尝试访问 yii.basic.com/user/login.htmlmodel中的属性标签:具体适用场景不明。。。。
在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中显示属性标签<?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; }*/ 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中验证数据
<?php namespace 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'));//得到指定字段的错误信息 } } }