zoukankan      html  css  js  c++  java
  • 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();?>
  • 相关阅读:
    通过SecureCRT向远程Linux主机上传和下载文件
    Oracle JDK究竟从哪个版本开始收费?
    设计模式之工厂方法(FactoryMethod)模式
    设计模式之构建者(Builder)模式
    Word文档中多个编号放同一行的方法(非技术)
    局域网内客户端无法使用机器名连接SQLServer服务器
    八、springboot 简单优雅的通过docker-compose 构建
    五、docker-compose开锋(docker 三剑客)
    四、docker 仓库(让我们的镜像有处可存)
    三、DockerFile 定制属于自己的专属镜像
  • 原文地址:https://www.cnblogs.com/wayne173/p/4369303.html
Copyright © 2011-2022 走看看