>数据流图
>创建表单过程中的收获
>>创建模型类的作用
创建模型即类
按规则自动验证,通过rule()函数
通过小部件自动生成html,widget小部件
>>命名空间
namespace声明命名空间
use调用类和模板和小部件
>>感觉controller就像大脑核心,负责各个数据处理,数据分流,文件调配
>>控制器类的方法实现
在Jikecontroller里面定义了Jikecontroller类继承了controller类想当于控制器
里面含有action()的方法,可以处理数据。
>>模板类的属性和方法
在models里定义了JikeForm类继承了model类,想当于数据库类
里面有很多数据和方法。
>>创建表单使用到的函数及其意义
Yii:$app->request->post()访问输入表单的函数
model->rule()的方法,可以验证表单数据类型
model->load()给对象赋值,括号中填写对象对应的值
model->validate()验证model对象的数据是否合法
$this->render('index-two',['model'=>$model])第一参数,视图中渲染的文件,第二个参数,传给视图的数据。
>controllers/JikeController.php
<span style="font-size:14px;"><?php
namespace app\controllers;//controllers的命名空间,就是对应的app文件夹路径
use Yii;
use yii\web\Controller;//使用控制器基类
use app\models\JikeForm;//使用模板来处理数据
class JikeController extends Controller
{
public function actionIndex(){
$model = new JikeForm();//对model里面的类进行初始化
if($model->load(Yii::$app->request->post())&&$model->validate())
{
return $this->render('index-two',['model'=>$model]);//如果接收到数据则交给index2进行渲染
}else{
return $this->render('index',['model'=>$model]);//如果没有收到数据,则交个index1进行渲染
}
}
}
?></span>
//控制核心代码,负责联系各个文件,实现了数据的分流,控制核心
//注意命名规范,文件名为与类名相同,方法名以action开始
//注意使用命名空间namespace,注意包含基类的头文件use
//由于controllers负责整理整个文件的关系,所以要包含模板文件
>models/JikeForm.php
<span style="font-size:14px;"><?php
namespace app\models;// 模板的命名空间
use Yii;
use yii\base\Model; //使用模板的基类
class JikeForm extends Model{
public $name;
public $pass;
public $email;
public $sex;
public $edu;
public $hobby;
public $info;
public function rules(){
//可以验证URL等很多内容,rule()函数的详细规则查看手册
return [
[['name','pass','email','sex','edu','hobby','info'],'required'],
['email','email','message'=>'shiyouxiang'],
['name','string','length'=>[2,10]]
];
}
public function attributeLabel(){
return[
'name'=>'名称',
'pass'=>'密码',
'sex'=>'性别',
'email'=>'邮箱'
];
}
}</span>
//使用键值对构成的数组进行赋值,使用键值对构成的数组进行性质的定义
<span style="font-size:14px;"><?php
//生成表单,使用小部件
//表单的形式,就按这个来别想太多
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin();?>
<?= $form -> field($model,'name')->textInput(['style'=>'width:200px;'])?>
<?= $form -> field($model,'pass')->passwordInput(['style'=>'width:200px;'])?>
<?= $form -> field($model,'email')->textInput(['style'=>'width:200px;'])?>
<?= $form -> field($model,'sex')->radioList(['1'=>'male','2'=>'female'])?>
<?= $form -> field($model,'edu')->dropDownList(['1'=>'大学','2'=>'中学','3'=>'小学'],['style'=>'width:200px;'])?>
<?= $form -> field($model,'hobby')->checkboxList(['篮球'=>'篮球','排球'=>'排球'])?>
<?= $form -> field($model,'info')->textarea(['rows'=>3,'style'=>'width:200px;'])?>
<div class = "form-group">
<?= Html::submitButton('Submit',['class'=>'btn btn-primary'])?>
<?php $form = ActiveForm::end();?>
</span>
//键值对说哦名属性,注意这种形式 get
>views/Jike/index2.php
<span style="font-size:14px;"><?php
use yii\helpers\Html
//有一个很严重的问题,index向controller里边返回的是数组中的键名而非键值
?>
<ul>
<li> <?php echo $model -> name;?></li>
<li> <?php echo $model -> sex;?></li>
<li> <?= Html::encode($model -> email)?></li>
<li> <?php echo $model -> edu;?></li>
<li> <?= Html::encode($model -> info)?></li>
</ul>
</span>
//两种输出方式 前者是php里面的echo
//后者<?= ?>等价于<?php echo ?>,中间使用html的方式进行输出