Yii-models
Yii-モデル
モデルは、ビジネスロジックとルールを表すオブジェクトです。 モデルを作成するには、 yii \ base \ Model クラスまたはそのサブクラスを拡張する必要があります。
属性
- 属性はビジネスデータを表します。 配列要素やオブジェクトプロパティのようにアクセスできます。 各属性は、モデルのパブリックにアクセス可能なプロパティです。 モデルが所有する属性を指定するには、* yii \ base \ Model
- attributes()*メソッドをオーバーライドする必要があります。
基本的なアプリケーションテンプレートの ContactForm モデルを見てみましょう。
ステップ1 *-次のコードを使用して、 *SiteController に actionShowContactModel という関数を作成します。
上記のコードでは、 ContactForm モデルを定義し、属性を設定して、画面にモデルを表示します。
ステップ2 *-Webブラウザのアドレスバーに *http://localhost:8080/index.php?r = site/show-contact-model と入力すると、次のように表示されます。
モデルが yii \ base \ Model から拡張されている場合、そのすべてのメンバー変数(パブリックおよび非静的)は属性です。 ContactForm モデルには、名前、電子メール、件名、本文、 verifyCode の5つの属性があり、新しい属性を簡単に追加できます。
属性ラベル
- 多くの場合、属性に関連付けられたラベルを表示する必要があります。 デフォルトでは、属性ラベルは* yii \ base \ Model
- generateAttributeLabel()メソッドによって自動的に生成されます。 属性ラベルを手動で宣言するには、 yii \ base \ Model :: attributeLabels()*メソッドをオーバーライドできます。
ステップ1 *- http://localhost:8080/index.php?r = site/contactを開くと、次のページが表示されます。
属性ラベルは名前と同じであることに注意してください。
ステップ2 *-次に、 *ContactForm モデルの attributeLabels 関数を次のように変更します。
ステップ3 *- *http://localhost:8080/index.php?r = site/contact を再度開くと、次の図に示すようにラベルが変更されていることがわかります。
シナリオ
さまざまなシナリオでモデルを使用できます。 たとえば、ゲストが連絡先フォームを送信する場合、すべてのモデル属性が必要です。 ユーザーが同じことをしたいときは、すでにログインしているので、DBから簡単に取得できるため、名前は必要ありません。
シナリオを宣言するには、* scenarios()*関数をオーバーライドする必要があります。 キーがシナリオ名であり、値が*アクティブな属性*である配列を返します。 アクティブな属性は検証する属性です。 また、*大量に*割り当てることもできます。
ステップ1 *-次の方法で *ContactForm モデルを変更します。
2つのシナリオを追加しました。 1つはゲスト用で、もう1つは認証済みユーザー用です。 ユーザーが認証される場合、ユーザーの名前は必要ありません。
ステップ2 *-次に、 *SiteController の actionContact 関数を変更します。
ステップ3 *-Webブラウザに *http://localhost:8080/index.php?r = site/contact と入力します。 現在、すべてのモデル属性が必要であることがわかります。
ステップ4 *-次のコードに示すように、 *actionContact でモデルのシナリオを変更すると、name属性は不要になります。
大規模な割り当て
大量の割り当ては、1行のコードで複数の入力属性からモデルを作成する便利な方法です。
コードの行は-
上記のコード行は次と同等です-
前者はずっときれいです。 大規模な割り当て*は*安全な属性*にのみ適用されることに注意してください。 これらは、 scenario()*関数にリストされている現在のシナリオ属性です。
データエクスポート
多くの場合、モデルはさまざまな形式でエクスポートする必要があります。 モデルを配列に変換するには、 SiteController の actionShowContactModel 関数を変更します-
アドレスバーに http://localhost:8080/index.php?r = site/show-contact-model と入力すると、次のように表示されます-
モデルを JSON 形式に変換するには、次の方法で actionShowContactModel 関数を変更します-
ブラウザ出力-
重要なポイント
モデルは通常、適切に設計されたアプリケーションのコントローラーよりもはるかに高速です。 モデルは-
- ビジネスロジックが含まれています。
- 検証ルールが含まれます。
- 属性を含む。
- HTMLを埋め込みません。
- リクエストに直接アクセスしません。
- シナリオが多すぎません。