首页 > 代码库 > yii2 入门教程2-------MVC里面的M

yii2 入门教程2-------MVC里面的M

  这次讲的是Model,M在MVC的中的作用,其实就是一个处理数据及各种复杂逻辑的实现的类,或许你对这句会看的莫名其妙,所以给你看几个小例子。 

  首先是处理数据,说到数据,我们在弄一个网页的时候,其实可以笼统的将其分成两部分。一种是我们向顾客收集的数据,比如用户登录时,输入的用户名和密码,因为是通过form表单收集,同时也不会存入数据库,我们暂且把这种数据叫做表单数据。另一种则是从数据库取的,或者说写了个表单,在用户填完后会存入数据库的,则将其称为数据库数据。

  先讲第一种,如果是以前你肯定会这样处理用户登录,首先写个form的html元素,

<form action="xxx.php" method="post">  <p>User: <input type="text" name="user" /></p>  <p>Password: <input type="password" name="pwd" /></p>  <input type="submit" value="Submit" /></form>

然后在表单处理页面也就是在xxx.php页面,写上如下的代码,这种写法,专业术语叫面向过程,知道就好:

<?php $user = $__POST[‘user‘];$password = $__POST[‘pwd‘];//然后写用户是否登录的代码?>

这样一个简单的登录就算写完了,接下去看看yii2是怎么完成登录的,首先同样的是form的htm元素。打开index.php?r=site/login我们就可以看到登录页面,然后根据前面教你的我们一路追踪,查看他的view,可以看到这样的代码:

恩,是的这个就是他的表单,和我们当初学的完全不一样。先不要被吓到,yii2封装了html,对于初学可能不知道是什么鬼,后面用惯了还是挺方便的,下面是每一段的解释。
<?
php $form = ActiveForm::begin([ ‘id‘ => ‘login-form‘, ‘options‘ => [‘class‘ => ‘form-horizontal‘], ‘fieldConfig‘ => [ ‘template‘ => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>", ‘labelOptions‘ => [‘class‘ => ‘col-lg-1 control-label‘], ], ]); ?>这一段内容,实际上就是等效于这段:<form action="xxx.php" method="post"> <?= $form->field($model, ‘username‘)->textInput([‘autofocus‘ => true]) ?>这里等效于 <input type="text" name="username" /> <?= $form->field($model, ‘password‘)->passwordInput() ?>这里等效于 <input type="text" name="password" /> <?= $form->field($model, ‘rememberMe‘)->checkbox([ ‘template‘ => "<div class=\"col-lg-offset-1 col-lg-3\">{input} {label}</div>\n<div class=\"col-lg-8\">{error}</div>", ]) ?> <div class="form-group"> <div class="col-lg-offset-1 col-lg-11"> <?= Html::submitButton(‘Login‘, [‘class‘ => ‘btn btn-primary‘, ‘name‘ => ‘login-button‘]) ?> </div> </div> <?php ActiveForm::end(); ?>
然后当我们点击的时候,就会把form表单的数据提交到site/login那里,找到那里的代码。
     $model = new LoginForm();        if ($model->load(Yii::$app->request->post()) && $model->login()) {            return $this->goBack();        }


$model->load(Yii::$app->request->post())
等效于
$model->username = $__POST[‘username‘];
$model->password= $__POST[‘password‘];
$
model->remberMe = $__POST[‘remberMe‘];
其实就是前面的赋值操作。

然后这个LoginForm就是我们开头说的模型类Model,他有三个public的常量,名字和我们的表单元素一模一样,这个就是form表单的模型类,我们向顾客收集的表单数据,会通过上面的方式存在类里面。

包括接下去的登录操作,在yii2也是一句$model->login()解决,这也是model的另一个作用,各种复杂逻辑的实现,这段我们原先会写在xxx.php下面,但是也移到Model下面来了。

技术分享

那么下面是小结:与第一种(面向过程)方式相比,其实思路都是一样的,创建form,提交数据,然后处理数据。区别是,后者用类来实现,而且会为这个form专门写一个类来处理数据,并且将处理这个表单的逻辑都写在这个类里面。

至于另一种与数据库对应的模型类,其实和这个差不多,只不过属性,从表单属性变成数据库字段,其他都一样,你要是不懂,之后再给你写例子。


yii2 入门教程2-------MVC里面的M