• 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();?>
  • 相关阅读:
    v​s​快​捷​键
    sequelize 基本操作
    服务器重启,自动重启httpd
    svn使用方法以及使用教程
    非常全的VsCode快捷键
    原生JS forEach()和map()遍历的区别以及兼容写法
    JS中 map, filter, some, every, forEach, for in, for of 用法总结
    map的使用
    Window和Mac下端口占用情况及处理方式
    vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
  • 原文地址:https://www.cnblogs.com/wayne173/p/4369303.html
Copyright © 2020-2023  润新知