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'));//得到指定字段的错误信息 } } }
相关文章推荐
- 登录phpmyadmin提示: #1045 无法登录 MySQL 服务器
- php版网易视频云api
- InputStreamReader/OutputStreamWriter乱码问题解决
- PHP第一站,反思复习之路
- WriteOutputStream
- PHP之:序列化和反序列化-serialize()和unserialize()
- yii-验证码
- yii框架中文件上传
- JHTP自测题_第七章_数组及动态数组(Array and ArrayList)
- 关于ThinkPhp中getField方法存在的问题
- PHP判断二级域名,301跳转
- Thinkphp的致命错误捕获流程
- 织梦后台发布文章提示“标题不能为空”
- thinkphp实现excel数据的导入导出
- 显试调用DLL------GetProcAddress的使用
- PHP:var_dump展示不全
- JHTP小结_第七章_数组及动态数组(Array and ArrayList)
- php自定义函数实现JS的escape的方法示例
- PHP中使用foreach和引用导致程序BUG及解决办法
- @在php中的作用