ホームページ 見出し Yii2 フレームワークの使い方チュートリアル: フォームの作成方法

Yii2 フレームワークの使い方チュートリアル: フォームの作成方法

Jul 04, 2017 am 11:35 AM
yii2 どうやって チュートリアル

phpを初めて使う友達。誰もがプロジェクトのやり方を学ぶためにすぐに使えるフレームワークを見つけたいと思うでしょう。一般的に、私は ThinkPHP を選択して試してみます。このフレームワークは始めるのが難しくなく、すぐにアプリケーションを開発できます。小規模ビジネスのアプリケーションに適しています。中国人が開発したものなので、中国語のサポートが充実しています。ドキュメントも比較的充実しており、公式サイトのコミュニティも比較的活発です。しかし、ある段階になると、基本的に ThinkPHP の使用に満足できなくなり、高パフォーマンスの開発フレームワークを選択します。 Yii には、MVC、DAO/ActiveRecord、I18N/L10N、キャッシュ、認証およびロールベースのアクセス制御、スキャフォールディング、テストなどを含む豊富な機能セットが付属しており、開発時間を大幅に短縮できます。ここでは、PHP 中国語 Web サイトで、yii2 フレームワークを使用してフォームを作成する方法を最初から学習します。

まず、弊社の php 中国語 Web サイトにアクセスしてオンラインで視聴できます Yii2 中国語マニュアル

また、php 中国語 Web サイトのダウンロード サイト ダウンロード: Yii 2 中国語マニュアル

yii2 フレームワークでのフォーム作成のトピックに移りましょう:

ディレクトリ

フォームの生成

フォーム内のメソッド
ActiveForm:: begin() メソッド
ActiveForm::end ( ) メソッド
getClientOptions() メソッド
その他のメソッド: errorsummary、validate、validateMultiple

フォーム内のパラメータ
フォームフォーム自身の属性 各項目(フィールド)の入力に関連する属性フォーム内のボックス
$fieldConfig
検証属性について
各フィールドコンテナスタイルの属性について
ajax 検証
フロントエンド JS イベント
フォーム内のその他の属性

まず Yii の最も単純なログインフォームを見てみましょう。生成された HTML コードとインターフェイスを直感的に理解できるようにします。

<?php $form = ActiveForm::begin([&#39;id&#39; => &#39;login-form&#39;]); ?>
  <?= $form->field($model, &#39;username&#39;) ?>
  <?= $form->field($model, &#39;password&#39;)->passwordInput() ?>
  <?= $form->field($model, &#39;rememberMe&#39;)->checkbox() ?>
  <p style="color:#999;margin:1em 0">
   If you forgot your password you can <?= Html::a(&#39;reset it&#39;, [&#39;site/request-password-reset&#39;]) ?>
  </p>
  <p class="form-group">
     <?= Html::submitButton(&#39;Login&#39;, [&#39;class&#39; => &#39;btn btn-primary&#39;, &#39;name&#39; => &#39;login-button&#39;]) ?>
  </p>
<?php ActiveForm::end(); ?>
ログイン後にコピー

以下は生成されたフォーム HTML で、その中に 5 つの部分をマークしました。

1. フォーム生成

Yii では、フォームは ActiveForm とウィジェットの両方です。 上でわかるように、フォームは begin

<?php $form = ActiveForm::begin([&#39;id&#39; => &#39;login-form&#39;]); ?>
ログイン後にコピー

で始まり、最後に各項目の入力ボックスです。 end

<?php ActiveForm::end(); ?>
ログイン後にコピー

2. フォーム内のメソッド

ウィジェットでは、begin() メソッドが int メソッドを呼び出します

public function init()
ログイン後にコピー

最後の end() メソッドが run メソッド

public function run()
ログイン後にコピー

を呼び出します。 :begin() メソッド

//这个是在执行 $form = ActiveForm::begin([&#39;id&#39; => &#39;login-form&#39;]); 中的begin方法的时候调用的
public function init()
{
    //设置表单元素form的id
    if (!isset($this->options[&#39;id&#39;])) {
      $this->options[&#39;id&#39;] = $this->getId();
    }
    //设置表单中间的要生成各个field的所使用的类
    if (!isset($this->fieldConfig[&#39;class&#39;])) {
      $this->fieldConfig[&#39;class&#39;] = ActiveField::className();
    }
    //这个就是输出表单的开始标签
    //如:<form id="login-form" action="/lulublog/frontend/web/index.php?r=site/login" method="post">
    echo Html::beginForm($this->action, $this->method, $this->options);
}
ログイン後にコピー

2. ActiveForm::end() メソッド

//这个是在执行 ActiveForm::end(); 中的end方法的时候调用的
public function run()
{
    //下面这个就是往视图中注册表单的js验证脚本,
    if (!empty($this->attributes)) {
      $id = $this->options[&#39;id&#39;];
      $options = Json::encode($this->getClientOptions());
      $attributes = Json::encode($this->attributes);
      $view = $this->getView();
      ActiveFormAsset::register($view);
      /*
       * $attributes:为要验证的所有的field数组。它的值是在activeform中创建field的时候,在field的begin方法中给它赋值的。
       * 其中每个field又是一个数组,为这个field的各个参数
       * 比如username的field中的参数有
       * validate、id、name、
       * validateOnChange、validateOnType、validationDelay、
       * container、input、error
       * 
       * $options:为这个表单整体的属性,如:
       * errorSummary、validateOnSubmit、
       * errorCssClass、successCssClass、validatingCssClass、
       * ajaxParam、ajaxDataType
       */
      $view->registerJs("jQuery(&#39;#$id&#39;).yiiActiveForm($attributes, $options);");
    }
    //输出表单的结束标签
    echo Html::endForm();
}
ログイン後にコピー

3. getClientOptions() メソッド

/*
* 设置表单的全局的一些样式属性以及js回调事件等
*/
protected function getClientOptions()
{
    $options = [
      &#39;errorSummary&#39; => &#39;.&#39; . $this->errorSummaryCssClass,
      &#39;validateOnSubmit&#39; => $this->validateOnSubmit,
      &#39;errorCssClass&#39; => $this->errorCssClass,
      &#39;successCssClass&#39; => $this->successCssClass,
      &#39;validatingCssClass&#39; => $this->validatingCssClass,
      &#39;ajaxParam&#39; => $this->ajaxParam,
      &#39;ajaxDataType&#39; => $this->ajaxDataType,
    ];
    if ($this->validationUrl !== null) {
      $options[&#39;validationUrl&#39;] = Url::to($this->validationUrl);
    }
    foreach ([&#39;beforeSubmit&#39;, &#39;beforeValidate&#39;, &#39;afterValidate&#39;] as $name) {
      if (($value = $this->$name) !== null) {
        $options[$name] = $value instanceof JsExpression ? $value : new JsExpression($value);
      }
    }
    return $options;
}
ログイン後にコピー

以下は、生成された

フォーム検証Js コードです​​

jQuery(document).ready(function () {
    jQuery(&#39;#login-form&#39;).yiiActiveForm(
    {
        "username":{
            "validate":function (attribute, value, messages) {
                yii.validation.required(value, messages, {"message":"Username cannot be blank."});
            },
            "id":"loginform-username",
            "name":"username",
            "validateOnChange":true,
            "validateOnType":false,
            "validationDelay":200,
            "container":".field-loginform-username",
            "input":"#loginform-username",
            "error":".help-block"},
        "password":{
            "validate":function (attribute, value, messages) {
                yii.validation.required(value, messages, {"message":"Password cannot be blank."});
            },
            "id":"loginform-password",
            "name":"password",
            "validateOnChange":true,
            "validateOnType":false,
            "validationDelay":200,
            "container":".field-loginform-password",
            "input":"#loginform-password",
            "error":".help-block"
            },
        "rememberMe":{
            "validate":function (attribute, value, messages) {
                yii.validation.boolean(value, messages, {
                    "trueValue":"1","falseValue":"0","message":"Remember Me must be either \"1\" or \"0\".","skipOnEmpty":1});
            },
            "id":"loginform-rememberme",
            "name":"rememberMe","validateOnChange":true,
            "validateOnType":false,
            "validationDelay":200,
            "container":".field-loginform-rememberme",
            "input":"#loginform-rememberme",
            "error":".help-block"}
    }, 
    {
        "errorSummary":".error-summary",
        "validateOnSubmit":true,
        "errorCssClass":"has-error",
        "successCssClass":"has-success",
        "validatingCssClass":"validating",
        "ajaxParam":"ajax",
        "ajaxDataType":"json"
    });
});
ログイン後にコピー

4他のメソッド: errorsummary、validate、validateMultiple

public function errorSummary($models, $options = [])
ログイン後にコピー

主に、モデル内のすべての

エラー メッセージを 1 つの p に要約します。

public static function validate($model, $attributes = null)
public static function validateMultiple($models, $attributes = null)
ログイン後にコピー

これら 2 つはエラー情報を取得する方法であり、比較的簡単なので詳細は説明しません。

3. フォーム内のパラメータ

1. フォーム自体のプロパティ

$action: 現在のフォーム送信の URL アドレスを設定します。空の場合は、現在の URL

$method です。送信メソッド、post または get、デフォルトは post です
$option: ID などのフォームの他の属性を設定します。ID が設定されていない場合は、$autoIdPrefix をプレフィックスとして自動的に追加される ID が自動的に生成されます

//这个方法在Widget基本中
public function getId($autoGenerate = true)
{
    if ($autoGenerate && $this->_id === null) {
      $this->_id = self::$autoIdPrefix . self::$counter++;
    }
    return $this->_id;
}
ログイン後にコピー

2.

の各フィールド入力ボックスに関連するフォーム属性 Yii によって生成される各フィールドは 4 つの部分で構成されます:

① 一番外側の p は各フィールドのコンテナです。

② ラベルは各フィールドのテキスト説明です。
③ input は入力要素、
④ にはエラーメッセージの p が付いています。

<p class="form-group field-loginform-username required has-error">
    <label class="control-label" for="loginform-username">Username</label>
    <input type="text" id="loginform-username" class="form-control" name="LoginForm[username]">
    <p class="help-block">Username cannot be blank.</p>
</p>
ログイン後にコピー

$fieldConfig: 全フィールドの統一設定情報により設定される属性です。つまり、フィールドクラスの属性をここで設定できます。

public function field($model, $attribute, $options = [])
{
    //使用fieldConfig和options属性来创建field
    //$options会覆盖统一的fieldConfig属性值,以实现每个field的自定义
    return Yii::createObject(array_merge($this->fieldConfig, $options, [
      &#39;model&#39; => $model,
      &#39;attribute&#39; => $attribute,
      &#39;form&#39; => $this,
]));
}
ログイン後にコピー

確認済みの物件について:

① $enableClientValidation:是否在客户端验证,也即是否生成前端js验证脚本(如果在form中设置了ajax验证,也会生成这个js脚本)。
② $enableAjaxValidation:是否是ajax验证
③ $validateOnChange:在输入框失去焦点并且值改变的时候验证
④ $validateOnType:正在输入的时候就进行验证
⑤ $validationDelay:验证延迟的时间,单位为毫秒

这5个属性都可以在创建每个field的时候单独设置,因为在field类中就有这5个属性。

关于每个field容器样式的属性:

$requiredCssClass:必填项的样式,默认为‘required'
$errorCssClass:验证错误的样式,默认值为‘has-error'
$successCssClass:验证正确的样式,默认值为‘has-success'
$validatingCssClass:验证过程中的样式,默认值为‘validating'

3、ajax验证

$validationUrl:ajax验证的url地方
$ajaxParam:url中的get参数,用来标明当前是ajax请求,默认值为‘ajax'
$ajaxDataType:ajax请求返回的数据格式

4、前端js事件属性

$beforeSubmit:在提交表单之前事件,如果返回false,则不会提交表单,格式为:

function ($form) {
 ...return false to cancel submission...
}
ログイン後にコピー

$beforeValidate:在每个属性在验证之前触发,格式为:

function ($form, attribute, messages) {
 ...return false to cancel the validation...
}
ログイン後にコピー

$afterValidate:在每个属性在验证之后触发,格式为:

function ($form, attribute, messages) {
}
ログイン後にコピー

5、表单中的其它属性

$validateOnSubmit:提交表单的时候进行验证
$errorSummary:总的错误提示地方的样式
$attributes:这个属性比较特殊,它是在创建field的时候,在field中为这个form中的$attributes赋值的。这样可以确保通过field方法生成的输入表单都可以进行验证

相关课程推荐:

1. 视频课程: 传智播客Yii开发大型商城项目视频教程

2. 视频课程: Yii2.0框架开发实战视频教程

3. 视频课程: Yii2框架搭建完整博客系统

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Dewuの使い方のチュートリアル Dewuの使い方のチュートリアル Mar 21, 2024 pm 01:40 PM

Dewu APP は現在非常に人気のあるブランド ショッピング ソフトウェアですが、ほとんどのユーザーは Dewu APP の機能の使い方を知りません。最も詳細な使用方法のチュートリアル ガイドは以下にまとめられています。次に、エディターがユーザーに提供する Dewuduo の概要です。機能の使い方チュートリアルですので、興味のある方はぜひご覧ください! Dewu の使い方チュートリアル [2024-03-20] Dewu の分割購入方法 [2024-03-20] Dewu クーポンの入手方法 [2024-03-20] Dewu マニュアルのカスタマーサービスの検索方法 [2024-03- 20] デューのピックアップコード確認方法 [2024-03-20] デューの購入場所 [2024-03-20] デューのVIP開放方法 [2024-03-20] デューの返品・交換申請方法

Quarkブラウザの使い方チュートリアル Quarkブラウザの使い方チュートリアル Feb 24, 2024 pm 04:10 PM

Quark Browser は現在非常に人気のある多機能ブラウザですが、ほとんどの友人は Quark Browser の機能の使い方を知りません。最もよく使用される機能とテクニックを以下に整理します。次に、エディターがユーザーをガイドします。 Quark Browserの多機能な使い方チュートリアルをまとめましたので、興味のある方はぜひ一緒にご覧ください! Quark Browserの使用方法に関するチュートリアル [2024-01-09]: Quark ブラウザでテスト用紙をスキャンして答えを確認する方法 [2024-01-09]: Quark Browser でアダルト モードを有効にする方法 [2024-01-09]: その方法Quark の使用済みスペースを削除するには [2024 -01-09]: Quark ネットワーク ディスク ストレージ スペースをクリーンアップする方法 [2024-01-09]: Quark のバックアップをキャンセルする方法 [2024-01-09]: Quark

numpy バ​​ージョンのアップグレード: 詳細でわかりやすいガイド numpy バ​​ージョンのアップグレード: 詳細でわかりやすいガイド Feb 25, 2024 pm 11:39 PM

numpy バ​​ージョンをアップグレードする方法: わかりやすいチュートリアル、具体的なコード例が必要 はじめに: NumPy は科学技術計算に使用される重要な Python ライブラリです。これは、強力な多次元配列オブジェクトと、効率的な数値演算を実行するために使用できる一連の関連関数を提供します。新しいバージョンがリリースされると、新しい機能やバグ修正が常に提供されます。この記事では、インストールされている NumPy ライブラリをアップグレードして最新の機能を入手し、既知の問題を解決する方法について説明します。ステップ 1: 最初に現在の NumPy バージョンを確認する

夏はぜひ虹を撮ってみてください 夏はぜひ虹を撮ってみてください Jul 21, 2024 pm 05:16 PM

夏の雨の後には、美しく魔法のような特別な天気の風景、虹がよく見られます。これも写真撮影ではなかなか出会えない光景で、とてもフォトジェニックです。虹が現れるにはいくつかの条件があります。まず、空気中に十分な水滴があること、そして、低い角度から太陽が当たることです。そのため、雨が上がった午後が最も虹が見えやすいのです。ただし、虹の発生は天候や光などの条件に大きく左右されるため、一般に虹の持続時間は短く、見頃や撮影に最適な時間はさらに短くなります。では、虹に遭遇したとき、どうすれば虹を適切に記録し、高品質の写真を撮ることができるでしょうか? 1. 虹を探す 上記の条件に加えて、虹は通常、太陽光の方向に現れます。つまり、太陽が西から東に輝いている場合、虹は東に現れやすくなります。

WeChat の支払い音をオフにする方法のチュートリアル WeChat の支払い音をオフにする方法のチュートリアル Mar 26, 2024 am 08:30 AM

1. まずWeChatを開きます。 2. 右上隅の[+]をクリックします。 3. QR コードをクリックして支払いを受け取ります。 4. 右上隅にある 3 つの小さな点をクリックします。 5. クリックして支払い到着の音声リマインダーを閉じます。

DisplayX (モニターテストソフトウェア) チュートリアル DisplayX (モニターテストソフトウェア) チュートリアル Mar 04, 2024 pm 04:00 PM

壊れたモニターを購入しないようにするには、購入時にモニターをテストすることが重要です。今日は、ソフトウェアを使用してモニターをテストする方法を説明します。方法ステップ 1. まず、この Web サイトで DisplayX ソフトウェアを検索してダウンロードし、インストールして開くと、ユーザーに提供されている多くの検出方法が表示されます。 2. ユーザーは、通常の完全テストをクリックします。最初のステップは、ディスプレイの明るさをテストすることです。ユーザーは、ボックスがはっきりと見えるようにディスプレイを調整します。 3. マウスをクリックして次のリンクに進み、モニターが黒と白の各領域を区別できれば、モニターはまだ良好であることを意味します。 4. マウスの左ボタンをもう一度クリックすると、モニターのグレースケール テストが表示されます。色の変化がスムーズであればあるほど、モニターの品質は向上します。 5. さらに、displayx ソフトウェアでは、

photoshoppcs5とはどんなソフトですか? -photoshopcs5の使い方チュートリアル photoshoppcs5とはどんなソフトですか? -photoshopcs5の使い方チュートリアル Mar 19, 2024 am 09:04 AM

PhotoshopCS は Photoshop Creative Suite の略で、Adobe 社が開発したソフトウェアで、グラフィック デザインや画像処理に広く使用されています。PS を学習する初心者として、今日は photoshopcs5 とはどのようなソフトウェアなのか、そして photoshopcs5 の使い方を説明しましょう。 1. photoshop cs5 とはどのようなソフトウェアですか? Adob​​e Photoshop CS5 Extended は、映画、ビデオ、マルチメディア分野の専門家、3D やアニメーションを使用するグラフィックおよび Web デザイナー、エンジニアリングおよび科学分野の専門家に最適です。 3D イメージをレンダリングし、それを 2D 合成イメージに結合します。動画を簡単に編集

専門家が教える! Huawei携帯電話で長い画像をカットする正しい方法 専門家が教える! Huawei携帯電話で長い画像をカットする正しい方法 Mar 22, 2024 pm 12:21 PM

スマートフォンの継続的な発展に伴い、携帯電話の機能はますます強力になり、その中でも長時間の写真を撮る機能は、多くのユーザーが日常生活で使用する重要な機能の1つになりました。長いスクリーンショットは、ユーザーが長い Web ページ、会話記録、または写真を一度に保存して、簡単に表示したり共有したりできるようにするのに役立ちます。数ある携帯電話ブランドの中でも、ファーウェイの携帯電話はユーザーから高く評価されているブランドの一つでもあり、長い写真のトリミング機能も高く評価されています。この記事では、ファーウェイの携帯電話で長い写真を撮る正しい方法と、ファーウェイの携帯電話をより良く活用するための専門的なヒントを紹介します。