Yii框架2.0的视图和widgets表单的使用

2.0的控制器的创建和action方法的添加和1.0的基本是一样的。但我发现他的widgets 的ActiveForm和1.1版本有些不一样的地方。

对于视图基本也是一样的,有render 和 renderPartial两个方法,后一个不会调入布局。也不会自动调入jquery组件,但在设置布局上有些不一样:

1.1是在componentsController.php里面有个$layout 的变量,通过修改这个变量的值来改变布局的。

2.0里面是没有通过在父类Controller里面配置的,有个findLayoutFile的方法,这里分析了各种情况,默认是采用的main,当然也可以像1.1那样直接写在父类里面还可以写在配置文件web.php里,'layout' => 'mine', 还可以同 layoutPath 设置布局文件的路径,如果有个别情况需要用自己的布局,可以在他的控制器里修改 $this->layout = 'mine',这样就会调用layout目录下的mine.php布局。

可以获取前台访问的路径。

$baseUrl = Yii::$app->request->baseUrl 来获取当前脚本的目录,因为此框架是单入口模式,所以就是根目录。

其中 1.1版本的时候是用 Yii::app() 来获取当前Yii实例的,2.0版本采用的事 Yii::$app 来获取当前实例。

首先是获取对象:

2.0版本里是这样的 $form = ActiveForm::begin();  而且要使用 use yiiwidgetsActiveForm;

1.1版本里是 $form = $this->beginWidget('CActiveForm')。

我在2.0版本里的widgets目录下没有找到CActiveForm.php 只有ActiveForm.php 文件。

其次是获取 表单里的对象也不一样了,比如文本框,

2.0里面是这样的 $form->field($LoginForm, 'name', ['id'=>'name']);  

1.1里面是这样的 $form->textField($loginForm, 'name', array('id'=>'name'));

看官方文档的时候发现不仅仅可以用ActiveForm可以创建form里面的元素,yiihelpersHtml 也可以创建,例如例子里就有个submit按钮就是用Html创建的。

Html::submitButton('提交', ['class'=>'btn btn-primary']);

比如要建个input 加入自己的属性的话 需要调用 textInput方法。例如。

<?php echo $form->field($model, 'username')->textInput(['id'=>'userName']); ?>
文本框:textInput();
密码框:passwordInput();
单选框:radio(),radioList();
复选框:checkbox(),checkboxList();
下拉框:dropDownList();
隐藏域:hiddenInput();
文本域:textarea(['rows'=>3]);
文件上传:fileInput();
提交按钮:submitButton();
重置按钮:resetButtun();

<?php
$form = ActiveForm::begin(['action' => ['test/getpost'],'method'=>'post',]); ?>

<? echo $form->field($model, 'username')->textInput(['maxlength' => 20]) ?>

<? echo $form->field($model, 'password')->passwordInput(['maxlength' => 20]) ?>

<? echo $form->field($model, 'sex')->radioList(['1'=>'男','0'=>'女']) ?>

<? echo $form->field($model, 'edu')->dropDownList(['1'=>'大学','2'=>'高中','3'=>'初中'], ['prompt'=>'请选择','style'=>'120px']) ?>

<? echo $form->field($model, 'file')->fileInput() ?>

<? echo $form->field($model, 'hobby')->checkboxList(['0'=>'篮球','1'=>'足球','2'=>'羽毛球','3'=>'乒乓球']) ?>

<? echo $form->field($model, 'info')->textarea(['rows'=>3]) ?>

<? echo $form->field($model, 'userid')->hiddenInput(['value'=>3]) ?>

<? echo Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>

<? echo Html::resetButton('重置', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>

<?php ActiveForm::end(); ?>

但是它除了input 等标签外还会附加很多其他的标签,比如在外面套了一层div之类的。要想只要input标签,就要使用yiihelpersHtml的active系列函数生成表单。

<?php $form = ActiveForm::begin(); ?>
            <?php echo Html::activeTextInput($model, 'username', ['id'=>'userName']); ?>
            <?php echo Html::activePasswordInput($model, 'password', ['id'=>'psd']); ?>
            <?php echo Html::activeTextInput($model, 'captcha', ['id'=>'verify']); ?>
            <?php echo Html::submitInput('', ['id'=>'sub']) ?>
        <?php ActiveForm::end();?>