代码讲解yii简单的mvc处理“套路”,写的是一个表单请求处理流程
视图代码,下面为yii自带form,html组件写的,也可用传统form写
1.视图文件头部加上
<?php
use yii\bootstrap\ActiveForm;
use yii\helpers\Html;
?>
2.视图代码用yii写是这样的,具体看注释
<!-- 提示信息 -->
<?php if(Yii::$app->session->hasFlash('info')){
echo Yii::$app->session->getFlash('info');
};?>
<!-- 表单开始 -->
<?php $form = ActiveForm::begin([
'options'=>['class'=>'new_user_form inline-input'],
'fieldConfig'=>[
'template' => '<div class="span12 field-box">{label}{input}{error}</div>'
],
]);?>
<!-- 输入框 -->
<?php echo $form->field($model, 'username')->textInput(['class' => 'span9']); ?>
<?php echo $form->field($model, 'useremail')->textInput(['class' => 'span9']); ?>
<?php echo $form->field($model, 'userpass')->passwordInput(['class' => 'span9']); ?>
<?php echo $form->field($model, 'repass')->passwordInput(['class' => 'span9']); ?>
<div class="span11 field-box actions">
<!-- 按钮 -->
<?php echo Html::submitButton('添加',['class'=>'btn-glow primary']);?>
<span>或者</span>
<?php echo Html::resetButton('取消',['class'=>'reset']);?>
</div>
<?php ActiveForm::end();?>
<!-- 表单结束 -->
控制器controller是这样的,具体看代码解释
<?php
namespace app\modules\controllers;
use yii\web\Controller;
use yii\data\Pagination;
use app\models\User;
use app\models\Profile;
use Yii;
class UserController extends Controller
{
public function actionReg()
{
// 设置视图公共部分,如果不需要公共部分视图,$this->layout设为false
$this->layout = 'layout1';
// 创建一个user模型
$model = new User;
// 判断是否为post请求,然后将post过来的数据传到model进行处理,下面代码都是套路
if(Yii::$app->request->isPost){
// 接收post过来的数据
$post = Yii::$app->request->post();
// reg为model处理数据,返回true或者false
if ($model->reg($post)) {
// 请求的callback
Yii::$app->session->setFlash('info','添加用户成功');
}
}
// 请求后处理输入框
$model->userpass = '';
$model->repass = '';
return $this->render("reg",['model'=>$model]);
}
}
模型代码
<?php
namespace app\models;
use yii\db\ActiveRecord;
use Yii;
class User extends ActiveRecord
{
public $repass;
public $loginname;
public $rememberMe;
// 模型对于的表,s省略前缀的写法
public static function tableName()
{
return "{{%user}}";
}
// 表单验证的写法,required,unique,email,compare等为一些自带的验证;而像validatePass,则为自定义验证方法
public function rules()
{
return [
['loginname', 'required', 'message' => '登录名不能为空', 'on' => ['login']],
['username', 'required', 'message' => '用户名不能为空', 'on' => ['reg']],
['username','unique','message'=>'用户名已被注册','on'=>['reg']],
['useremail', 'required', 'message' => '用户邮箱不能为空', 'on' => ['reg','regbymail']],
['useremail', 'email', 'message' => '用户邮箱格式不正确', 'on' => ['reg','regbymail']],
['useremail','unique','message'=>'用户邮箱已被注册','on'=>['reg','regbymail']],
['userpass', 'required', 'message' => '密码不能为空', 'on' => ['reg','login']],
['repass', 'required', 'message' => '确认密码不能为空', 'on' => ['reg']],
['repass','compare','compareAttribute'=>'userpass','message'=>'两次密码输入不一致','on'=>['reg']],
['userpass', 'validatePass', 'on' => ['login']],
];
}
public function reg($data, $scenario = 'reg')
{
// 注册验证方法,要验证那些字段,到上面rules中进行注册
$this->scenario = $scenario;
// 下面的代码也是套路,载入controller传过来的数据,和验证数据;最后进行数据库(save,deleteAll,updateAll等)处理
if ($this->load($data) && $this->validate()) {
$this->username = $data['User']['username'];
$this->userpass = $data['User']['userpass'];
$this->createtime = time();
$this->userpass = md5($this->userpass);
// 存数据库
if ($this->save(false)) {
return true;
}
return false;
}
return false;
}
}
点击查看更多内容
7人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦