ホームページ バックエンド開発 PHPチュートリアル yii2のActiveFormフォームの使い方の紹介

yii2のActiveFormフォームの使い方の紹介

Apr 12, 2019 am 10:02 AM
yii2

この記事では、yii2 の ActiveForm フォームの使用方法を紹介します。参考になる内容です。困っている方は参考にしてください。お役に立てれば幸いです。

現在のプロジェクトはフロントエンドとバックエンドの分離モードではなく、PHP の yii2 フレームワークを使用しているため (すべての HTML コードと js はほとんど .php ファイルに埋め込まれているため、追加または送信されます) [Inkjet... .]))、フロントエンドで使用する必要がある yii2 ウィジェットを整理します (フロントエンドに PHP の書き込みエラーやスタイルの問題が含まれる場合は、アドバイスをお願いします)

シナリオを使用してフォームを使用してみます

基本的な登録呼び出しウィジェット

<?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();

パスワード ボックス:passwordInput();

ラジオ ボタン:radio(),radioList();

チェックボックス: checkbox(), checkboxList();

ドロップダウンボックス:dropDownList();

複数選択リスト: listBox();

隠しフィールド: hiddenInput();

テキストエリア: textarea(['rows'=>3]);

ファイルのアップロード: fileInput();

ウィジェット拡張子field($model , 'username')->widget(\yii\widgets\MaskedInput::className(), ['mask' => '9999/99/99',]); ?>

2. 以下では、各メソッドの基本的な呼び出しを 1 つずつ説明し、必要なもの (メソッドのタイプ) をカスタマイズする方法を説明します。 inputタグは上記各メソッドのinputの前に記述します)

##2.1 inputテキスト ボックス/パスワード ボックスと指定された各タイプ ボックス

<?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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

See all articles