>  기사  >  백엔드 개발  >  yii2의 ActiveForm 폼을 사용하는 방법 소개

yii2의 ActiveForm 폼을 사용하는 방법 소개

藏色散人
藏色散人앞으로
2019-04-12 10:02:404013검색

이 글은 yii2에서 ActiveForm 양식을 사용하는 방법을 소개합니다. 이는 특정 참조 가치가 있으므로 도움이 필요한 친구에게 도움이 되기를 바랍니다.

현재 프로젝트는 프런트엔드와 백엔드 분리 모드가 아니며 PHP의 yii2 프레임워크를 사용하므로(모든 HTML 코드, js는 대부분 .php 파일에 포함되어 있으며 어느 정도 동시에 제출됩니다. [잉크젯...] ), 따라서 프런트엔드에서 사용해야 하는 yii2 위젯 중 일부를 정렬하기 위해 (프론트엔드에 PHP 작성 오류나 스타일 문제가 포함되어 있으므로 조언을 부탁드립니다)

사용 시나리오는 다음을 위해 위젯을 호출하려고 합니다. Forms

기본 등록

<?php
  use yii\helpers\Html;
  use yii\widgets\ActiveForm;
?>

  //首先注册activeForm小部件,并赋值给$form(php中的声明变量方法用$ 等价于js中的var let)
  //begin 标志小部件开始
  <?php $form = ActiveForm::begin([
      &#39;id&#39; => &#39;login-form&#39;, //声明小部件的id 即form的id
     //声明需要添加的属性 ,例如class , data-x等
      &#39;options&#39; => [&#39;class&#39; => &#39;form-horizontal&#39;],
  ]) ?>

    //注册完小部件后可以在 activeForm小部件声明块中调用小部件的方法
      <?= $form->field($model, &#39;password&#39;)->passwordInput() ?>

//::end标识小部件结束
<?php ActiveForm::end() ?>

1. 우선 activeForm의 몇 가지 기본 메소드를 나열하십시오.

사용자 정의 입력 상자: input();

텍스트 상자: textInput(); (['rows'=>3]);

파일 업로드: fileInput();

widget 확장자2f344a32ace7da85628d1feacf48dca8field($model, 'username')->widget(yiiwidgetsMaskedInput: : className(), ['mask' => '9999/99/99',]); ?>

2 아래에서는 각 메소드의 기본 호출과 방법을 설명합니다. 필수(위의 각 방법에서 입력하기 전에 입력 태그 유형이 설명되어 있습니다)

2.1 입력 텍스트 상자/비밀번호 상자 및 각 지정된 유형 상자

<?php $form=ActiveForm::begin([&#39;id&#39;=>&#39;login&#39;,&#39;class&#39;=>&#39;login&#39;])?>
    <!-- 简易用法 使用activeForm 的 fiedld方法  -->
    <!-- 其中 该方法下有 
        textInout/passwordInput 等一些常用input类型方法
        hint 输入前的提示内容
        error 错误内容 //一般由后台生成
        label 可以更改label内的内容
        在hint,error,label设置class后将会重置了 这些方法内原来属于容器上的class若需要可以原样赋回去
    -->
    <!-- 这里的
        $mode为跟字段有关的数据模型 ,
        第二个参数为关系模型中的字段不存在将报错,
        第三个参数为模板内的一些内容的进行自定义
    -->
    <?= $form->field($model, &#39;username&#39;,[
        &#39;options&#39;=>[],//数组里面可以设置自需属性
        // template 为字符串模板可自定义模板 ,
        // 其中 {label} {input} {hint} {error} 存在是会调用对应封装好的html模板 当然你也可以不写这样就不会生成yii2内置小部件模板
        &#39;template&#39; => &#39;{label} {input} {hint} {error}&#39;,
        // 以下三个分别可以设置label ,input ,hint,error的属性(都是选填项)
        // 其中如果后面有使用->input...,label(...)等将会将这些里面的配置合并值对应的xxxOptions 内
        &#39;labelOptions&#39; => [
            &#39;class&#39;=>&#39;需要在label上添加的类名&#39;
            //....其他属性集
        ],
        &#39;inputOptions&#39; => [],
        &#39;hintOptions&#39; => [],
        &#39;errorOptions&#39; => [],
    ])->textInput([
        // 在options数组内可以设置任意属性
        &#39;class&#39;=>&#39;testClass&#39;,
        &#39;value&#39;=>&#39;测试&#39;
    ])->hint(
        // 设置提示内容,当只有一个参数切为false(boolean)用于显示提示的标签
        &#39;Please enter your name&#39;,
        [
            // 设置任意属性
            &#39;class&#39; => &#39;testHint&#39;
    ])->label(
        // 设置label显示内容,当只有一个参数切为false(boolean)label标签将不会被渲染
        &#39;Name&#39;,
        [
            // 设置任意属性
            &#39;class&#39; =>&#39;testLabel&#39;
    ])->error([
        // 任意属性,当只有一个参数切为false(boolean)用于显示错误的标签
        &#39;class&#39;=>&#39;errors&#39;
    ]) ?>

    <!-- 可自定义类型input 这里只描述了input的参数  其余参数参考上个示例 -->
    <?= $form->field($model, &#39;username&#39;)->input(
        // input内只允许放置两个参数即[type ,options]
        &#39;email&#39;,//该处为指定type="xxxx"的input类型
        [&#39;class&#39;=>&#39;tests&#39;,&#39;value&#39;=>&#39;值&#39;]//可在内部定义任何属性
    ) ?>
                       
<?php ActiveForm::end();?>
2.2 라디오 라디오 버튼 시리즈

<?php $form=ActiveForm::begin([&#39;id&#39;=>&#39;login&#39;,&#39;class&#39;=>&#39;login&#39;])?>

    <!-- 
        老实说对这个radio方法相当迷惑  一个单选按钮选择而且一旦选择无法取消,无法一次柑橘属性放置多个值 在有radioList方法的前提下觉得相当鸡肋
        第二个参数中false为是否开启label标签若没开启 labelOption 将无效  ,label设置的值直接显示在容器内
     -->
    <?= $form->field($model, &#39;username&#39;)->radio([
        // 隐藏域中的值
        &#39;uncheck&#39; =>&#39;test1&#39;,
        // 定义lebal的内容
        &#39;label&#39; =>&#39;test&#39;,
        // label上的任意属性
        &#39;labelOptions&#39;=>[
            &#39;gs&#39;=>&#39;test&#39;
        ]
    ],false)?>

    <!-- 
        单选框组 

        若要设置默认值,则在对应控制器中将指定字段设置为 需要选择的值
        $model->username = 1;
    -->

    <?= $form->field($model, &#39;username&#39;)->radioList([
        &#39;0&#39;=>&#39;a&#39;,
        &#39;1&#39;=>&#39;b&#39;,
        &#39;2&#39;=>&#39;c&#39;
    ],[
        // tag声改变 class="radio"的父级标签 若tag设置为h3 
        //    则 <div id="loginform-username" key="testKey" role="radiogroup" aria-required="true"> 
        //    => 转为 <h3 id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
        // <div class="form-group field-loginform-username required">
        //     <label class="control-label">Username</label>
        //     <input type="hidden" name="LoginForm[username]" value="">
        //     <div id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
        //         <div class="radio"><label><input type="radio" name="LoginForm[username]" value="0"> a</label></div>
        //         <div class="radio"><label><input type="radio" name="LoginForm[username]" value="1"> b</label></div>
        //         <div class="radio"><label><input type="radio" name="LoginForm[username]" value="2"> c</label></div>
        //     </div>

        //     <p class="help-block help-block-error"></p>
        // </div>
        &#39;tag&#39;=>&#39;h3&#39;,
        // 未选择是默认提交的值
        &#39;unselect&#39;=>&#39;1&#39;,
        // 如果设置了item选项,则忽略此选项
        &#39;encode&#39;=>false,
        // 每个单选块之间的内容 写的是什么字符串输出就什么字符串
        &#39;separator&#39;=>&#39;&#39;,
        // 定义在每个input单选按钮上的属性
        &#39;itemOptions&#39;=>[
            &#39;tess&#39;=>&#39;jzq&#39;
        ],
      //可调用的回调,可用于自定义与$Item中单个项对应的HTML代码的生成。此回调的签名必须是:函数($index、$Label、$name、$check、$value),
      //其中$index是整个列表中单选按钮的基于零的索引;$Label是单选按钮的标签;$name、$value和$check表示单选按钮输入的名称、值和选中状态。
        &#39;item&#39;=>function($index, $label, $name, $checked, $value){
            // 这块跟encode是在下才疏学浅暂时还未明白啥子用处,待弄明白后在补上,若有码友知晓这块具体作用用法,希望不吝赐教,感激
            // echo $index, $label, $name, $checked, $value;
        },
        // 除此yii2有规定属性之外还可自定义任意属性  且上述属性均不是必填
    ])?>

2.3 체크박스 다중 선택 상자 시리즈

<?php $form=ActiveForm::begin([&#39;id&#39;=>&#39;login&#39;,&#39;class&#39;=>&#39;login&#39;])?>

    <!-- 
        checbox方法
        该方法与radio 方法近似就不多说了 直接撸代码 具体可参考 radio
     -->
    <?= $form->field($model, &#39;username&#39;)->checkbox([
        // 隐藏域中的值
        &#39;uncheck&#39; =>&#39;test1&#39;,
        // 定义lebal的内容
        &#39;label&#39; =>&#39;test&#39;,
        // label上的任意属性
        &#39;labelOptions&#39;=>[
            &#39;gs&#39;=>&#39;test&#39;
        ]
    ],true)?>

    <!-- 
        checkboxList方法
        多选框
     -->
     <?= $form->field($model, &#39;username&#39;)->checkboxList([
        &#39;1&#39;=>&#39;篮球&#39;,
        &#39;2&#39;=>&#39;足球&#39;,
        &#39;3&#39;=>&#39;游戏&#39;,
        &#39;4&#39;=>&#39;读书&#39;
    ],[
         // tag声改变 class="radio"的父级标签 若tag设置为h3 
        //    则 <div id="loginform-username" key="testKey" role="radiogroup" aria-required="true"> 
        //    => 转为 <h3 id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
        // <div class="form-group field-loginform-username required">
        //     <label class="control-label">Username</label>
        //     <input type="hidden" name="LoginForm[username]" value="">
        //     <div id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
        //         <div class="radio"><label><input type="radio" name="LoginForm[username]" value="0"> a</label></div>
        //         <div class="radio"><label><input type="radio" name="LoginForm[username]" value="1"> b</label></div>
        //         <div class="radio"><label><input type="radio" name="LoginForm[username]" value="2"> c</label></div>
        //     </div>

        //     <p class="help-block help-block-error"></p>
        // </div>
        &#39;tag&#39;=>&#39;h3&#39;,
        // 未选择是默认提交的值
        &#39;unselect&#39;=>&#39;1&#39;,
        // 如果设置了item选项,则忽略此选项
        &#39;encode&#39;=>false,
        // 每个单选块之间的内容 写的是什么字符串输出就什么字符串,建议如无特殊情况 请忽视该字段
        // &#39;separator&#39;=>&#39;,&#39;,
        // 定义在每个input单选按钮上的属性
        &#39;itemOptions&#39;=>[
            &#39;tess&#39;=>&#39;jzq&#39;
        ],
        // 用于替换html指向函数后若不做操作将会输出空
        // &#39;item&#39;=>function($index, $label, $name, $checked, $value){
            // 这块跟encode是在下才疏学浅暂时还未明白啥子用处,待弄明白后在补上,若有码友知晓这块具体作用用法,希望不吝赐教,感激
            // echo $index, $label, $name, $checked, $value;
        // },
        // 除此yii2有规定属性之外还可自定义任意属性  且上述属性均不是必填
    ])?>

                       
<?php ActiveForm::end();?>
2.4 선택 드롭다운 목록 시리즈
<?php $form=ActiveForm::begin([&#39;id&#39;=>&#39;login&#39;,&#39;class&#39;=>&#39;login&#39;])?>

    <!-- 
        dropDownList方法
        下拉列表
     -->
     <?= $form->field($model, &#39;username&#39;)->dropDownList([
        //  二维数组直接回报上组标签
        &#39;test&#39;=>[
            &#39;1&#39;=>&#39;篮球&#39;,
            &#39;2&#39;=>&#39;足球&#39;,
        ],
        &#39;3&#39;=>&#39;游戏&#39;,
        &#39;4&#39;=>&#39;读书&#39;
    ],[
        // 设置下拉列表的默认请选择选项
        &#39;prompt&#39;=>[
            &#39;text&#39; => &#39;请选择&#39;, 
            &#39;options&#39; => [&#39;value&#39; => &#39;none&#39;, &#39;class&#39; => &#39;prompt&#39;, &#39;label&#39; => &#39;Select&#39;]
        ],
        &#39;encode&#39;=>false,
        // 对select option的设置条件以及更改内容
        &#39;options&#39;=>[
            // 设置禁止选择项
            &#39;2&#39; => [&#39;disabled&#39; => true],
            //替换或者追加指定key的内容,实际上原内容还在只是假设了 label 属性 和显示了 label的属性值
            &#39;4&#39; => [&#39;label&#39; => &#39;value 2&#39;],
        ],
        &#39;encodeSpaces&#39;=>true
        // 除此yii2有规定属性之外还可自定义任意属性  且上述属性均不是必填
    ])?>

    

        
                       
<?php ActiveForm::end();?>
2.5 위젯 위젯

<?php $form=ActiveForm::begin([&#39;id&#39;=>&#39;login&#39;,&#39;class&#39;=>&#39;login&#39;])?>

    <!-- 
        小部件
        用于强制输入正确内容的input部件
     -->
    <?= $form->field($model, &#39;username&#39;,[
        &#39;template&#39;=>&#39;<h2>test</h2> {label} {input} {error}&#39;
    ])->widget(\yii\widgets\MaskedInput::className(), [
        // 指定input类型
        // &#39;type&#39;=>&#39;time&#39;,
        // 指定必须输入的类型
        &#39;mask&#39; => &#39;999-9999-9999&#39;,
        &#39;options&#39;=>[&#39;class&#39; => &#39;form-control test&#39;]
    ]); ?>

    <!-- 
        用于生成带图片验证的input小部件
        -->
    <?= $form->field($model, &#39;verifyCode&#39;)->widget(Captcha::className(), [
        &#39;captchaAction&#39; => &#39;login/captcha&#39;,
        &#39;options&#39; => [
            &#39;class&#39; => &#39;two&#39;,
            &#39;id&#39;=>&#39;two&#39;,
            &#39;placeholder&#39; => &#39;请输入验证码&#39;,
        ],
        &#39;template&#39; => &#39;{input}{image}&#39;,
        &#39;imageOptions&#39; => [
            &#39;alt&#39; => &#39;images&#39;,
        ]
    ])?>

  --------------------- 最后一个并未实测   -------------------------------
<!-- 自定义小部件 需在widget文件定义源文件 --> <?= $form->field($model, &#39;username&#39;)->widget(&#39;WidgetClassName&#39;, [ // configure additional widget properties here ]) ?> <?php ActiveForm::end();?>

위 내용은 동안 사용 이번에는 이 짧은 요약에 사용법 오류가 있으면 알려주세요

위 내용은 yii2의 ActiveForm 폼을 사용하는 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제