Yii でモデルを作成して使用する方法、yiimodel_PHP チュートリアル
Yii でモデルを作成して使用する方法、yiimodel
この記事では、例を通して Yii でのモデルの作成と使用を分析します。参考のために皆さんと共有してください。詳細は次のとおりです:
YII は、フォーム モデル (CFormModel クラス) とアクティブ レコード モデル (CAtiveRecord クラス) の 2 つのモデルを実装しており、どちらも CModel クラスから継承しています。 CFormModel で表されるデータ モデルは、HTML フォームから収集された入力であり、すべてのロジック (フォーム フィールドに適用されるフォーム検証やその他のビジネス ロジックなど) をカプセル化します。データはメモリに保存することも、アクティブ レコードを利用してデータベースに保存することもできます。
データベース接続操作
config/main.php内
リーリーコメントを受け付けます。php は pdo をサポートする必要があります
操作ログを見る
リーリーコメントをオンにする
1.CActiveRecordに基づくモデル
アクティブ レコード (AR) は、オブジェクト指向のアプローチを使用してデータに抽象的にアクセスするデザイン パターンです。Yii では、AR オブジェクトの各インスタンスは CActiveRecord クラスまたはそのサブクラスになります。これは、データベース テーブルまたはビュー内のレコードの行をラップし、このモデルを使用して使用する必要があるほとんどのビジネス ロジックを含むデータベースのすべてのロジックと詳細をカプセル化します。データベース テーブルの行の各列フィールドの値は、AR オブジェクトの属性に対応します。テーブルをクラスに、行をオブジェクトに、列をオブジェクトのデータにマップします。つまり、Active Record クラスの各インスタンスは、データベース内のテーブルの行を表します。ただし、Active Record クラスは、データベース テーブル内のフィールドとクラス内の属性間の単なるマッピング関係ではありません。また、このデータに対していくつかのビジネス ロジックを処理し、データベース上のすべての読み取りおよび書き込み操作を定義する必要もあります。
1) CActiveRecord クラスに基づいてモデルを宣言します
リーリー2) 親クラスのメソッドを使用してデータベース操作を完了します
(1) 挿入:
リーリー(2) 選択: よく使用されるいくつかの方法
リーリー(3) アップデート
リーリー(4) 削除
リーリー(5) トランザクションを使用する
リーリー2. CFormModel に基づくモデル
フォームに必要な HTML を記述する前に、ユーザーにどのようなデータを入力してもらい、どのようなルールに従う必要があるかを決定する必要があります。モデル クラスを使用して、この情報を記録できます。モデルは、ユーザー入力の維持と検証の中核です。
ユーザーの入力をどのように使用するかに応じて、2 種類のモデルを作成できます。ユーザーが入力したデータが収集、使用され、その後破棄される場合はフォーム モデルが作成され、ユーザーが入力したデータがデータベースに保存される場合はアクティブ レコードが使用されます。どちらのモデルも、基本クラス CModel で定義されたフォームの共通インターフェイスを継承します。1) モデルクラスの定義
以下の例では、ログインページでユーザー入力を収集するための LoginForm モデルを作成します。ログイン情報はユーザー認証にのみ使用され、保存する必要がないため、フォームモデルを使用して作成します
リーリー
LoginForm は、$username、$password、$rememberMe の合計 3 つの属性を宣言しますユーザー名、ユーザーが入力したパスワード、およびログインを記憶するオプションを記録するために使用されます。 $rememberMe のデフォルト値は false であるため、フォームが表示されるときに対応するチェック ボックスはチェックされません。
ヒント: 通常のプロパティと区別するために、「プロパティ」ではなく「属性」という名前を使用します。
2) 検証ルールを宣言する
ユーザーが送信したデータがモデルに入力されたら、使用する前にそれらが合法かどうかを確認する必要があります。これは、一連のルールを使用して入力を検証することによって実現されます。 rulesers() メソッドで配列を構成することで検証ルールを定義します
リーリー
上記のコードは、ユーザー名とパスワードが必須であり、パスワードが検証される必要があり、rememberMe がブール型である必要があることを指定していますrules() で返される各ルールは次の形式である必要があります
array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...追加オプション)
AttributeList は、検証する必要がある属性名のカンマ区切りのリストです。バリデータは、どのような検証を行う必要があるかを示します。オプションの on パラメーターは、ルールが適用されるシナリオのリストを示します。(追加オプション) は、バリデーターの関連属性に最初に対応するために使用される、対応する名前と値ですルールでバリデーターを指定するには 3 つの方法があります。まず、バリデーターは、上記の例の認証などのクラスのメソッドを使用できます。 Validator メソッドは次の形式で宣言する必要があります
コードをコピーします コードは次のとおりです: public function ValidatorName($attribute,$params) { ... }
次に、Validator はバリデーターのクラス名にすることができ、ルールが適用される場合、バリデーター クラスのインスタンスが作成され、実際の検証が実行されます。ルール内の追加属性。最初のインスタンスの関連属性に使用されます。バリデータークラスは CValidator
から継承する必要があります
このパラメータは「挿入」または「更新」にすることができ、それぞれ挿入または更新時にルールを適用できます。ライフがない場合、save() が呼び出されるたびにこのルールが適用されます。
第三、Validator 可以使验证器类预先定义的别名。在上面的例子中,“required”便是CRequiredValidator的别名,用来验证属性不能为空。下面是预定义的验证器类别名的列表
? boolean:CBooleanValidator的别名,验证属性的值是否是CBooleanValidator::trueValue 或者 CBooleanValidator::falseValue
? captcha:CCaptchaValidator的别名,验证属性的值是否和CAPTCHA中显示的验证码的值相等
? compare:CCompareValidator的别名,验证属性的值是否等于另一个属性或者一个常量
? email:CEmailValidator的别名,验证属性的值是否是个合法的email地址
? default:CDefaultValueValidator的别名,为属性指派一个默认值
? exist:CExistValidator的别名,验证属性的值是否能在表的列里面找到
? file: CFileValidator 的别名, 验证属性是否包含上传文件的名字
? filter:CFilterValidator的别名,使用一个过滤器转换属性的形式
? in: CRangeValidator 的别名, 验证属性值是否在一个预订的值列表里面
? length: CStringValidator 的别名, 确保了属性值的长度在指定的范围内.
? match: CRegularExpressionValidator 的别名, 验证属性是否匹配一个正则表达式.
? numerical: CNumberValidator 的别名, 验证属性是否是一个有效的数字.
? required: CRequiredValidator 的别名, 验证属性的值是否为空.
? type: CTypeValidator 的别名, 验证属性是否是指定的数据类型.
? unique: CUniqueValidator 的别名, 验证属性在数据表字段中是否是唯一的.
? url: CUrlValidator 的别名, 验证属性是否是一个有效的URL路径.
下面我们给出一些使用预定义验证器的例子。
// username is required array('username', 'required'), // username must be between 3 and 12 characters array('username', 'length', 'min'=>3, 'max'=>12), // when in register scenario, password must match password2 array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'), // when in login scenario, password must be authenticated array('password', 'authenticate', 'on'=>'login'),
3) 安全属性的设置
当一个模型创建之后,我们往往需要根据用户的输入,为它填充属性。这可以方便的通过下面批量赋值的方式来实现
$model=new LoginForm; if(isset($_POST['LoginForm'])) $model->attributes=$_POST['LoginForm'];
最后那条语句便是批量赋值,把$_POST['LoginForm']中每个属性都赋值到对应的模型属性中,它等价于下面的语句
foreach($_POST['LoginForm'] as $name=>$value) { if($name is a safe attribute) $model->$name=$value; }
声明属性是否是安全属性是个至关重要的工作。例如,如果我把把数据表的主键暴露为安全属性,那么便可以通过修改主键的值,来管理本没有权限管理的数据,进行攻击。
4) 1.1版中的安全属性
在1.1版中,如果属性在适用的规则中指定了验证器,则认为是安全的。例如
array('username, password', 'required', 'on'=>'login, register'), array('email', 'required', 'on'=>'register'),
上面的代码中用户名和密码属性在login的场景下不允许为空。用户名、密码邮箱在register的场景下不允许为空。因此如果在login的场景下 进 行批量赋值,仅仅用户名和密码会被赋值,因为login场景下验证规则里仅出现了这两个属性,但是如果是在register场景下,那么这三个属性都 会被 赋值。
// in login scenario $model=new User('login'); if(isset($_POST['User'])) $model->attributes=$_POST['User']; // in register scenario $model=new User('register'); if(isset($_POST['User'])) $model->attributes=$_POST['User'];
那么为什么我们使用如此的策略来决定一个属性是否是安全属性呢?因为一个属性,已经有了一个或者多个对个进行校验的规则,那么我还需要担心吗?
需要记住的是,验证器是用来检测用户输入的数据,而不是我们用代码产生的数据(例如 时间戳,自增的主键等)。因此不要给那些不需要用户输入的属性添加验证器。
有时候我们想声明一些属性为安全属性,但是又不必给指定一个验证规则。例如文章的正文属性,我们可以允许用户的任何输入。为了实现这个目标,我们可以用safe规则。
复制代码 代码如下:array('content', 'safe')
对应的也有一个unsafe规则,来指定哪些属性是不安全的
复制代码 代码如下:array('permission', 'unsafe')
unsafe并不常用,对你以前定义的安全属性来说,这是个例外
5) 获取验证错误
当验证结束后,任何可能的错误都存储在模型的实例中。我们可以通过调用CModel::getErrors() 和 CModel::getError()重新获取到。这两个方法的区别在于,第一个可以返回指定模型属性的所有错误,而第二个方法只返回了第一条错误。
6) 属性标签
设计表单的时候,我们需要为用户的输入框显示一个标签,来提示用户输入。尽管我们可以再form中写死,但是如果我们在相应的模型中指定的话会更加方便和灵活
默认情况下,CModel 会简单的返回属性的名字作为标签。这可以通过重写attributeLabels() 方法来自定义。在接下来章节中我们将看到,在模型中指定标签可以让我们更快更强大的创建一个form表单
この記事が皆さんの Yii フレームワークに基づく PHP プログラミングに役立つことを願っています。
興味がありそうな記事:
- Yii フレームワークのログインプロセス分析
- Yii で CGridView の一括削除を実装する方法
- 配列とオブジェクトに基づく Yii モデルクエリ手法の詳細な例
- Yii 権限制御メソッド (3 つのメソッド) )
- yii は、activeFileField コントロールを使用して、ファイルと画像をアップロードするメソッドを実装します
- yii は、CUploadedFile を使用してファイルをアップロードするメソッドを実装します
- yii データベースクエリメソッド
- Yii でフロントエンドとバックエンドのログインを処理する新しいメソッド

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









従来のコンピューティングを超える能力を備えているだけでなく、より低コストでより効率的なパフォーマンスを実現する人工知能モデルを想像してみてください。これは SF ではありません。世界で最も強力なオープンソース MoE モデルである DeepSeek-V2[1] が登場しました。 DeepSeek-V2 は、経済的なトレーニングと効率的な推論の特徴を備えた強力な専門家混合 (MoE) 言語モデルです。これは 236B のパラメータで構成されており、そのうち 21B は各マーカーをアクティブにするために使用されます。 DeepSeek67B と比較して、DeepSeek-V2 はパフォーマンスが優れていると同時に、トレーニング コストを 42.5% 節約し、KV キャッシュを 93.3% 削減し、最大生成スループットを 5.76 倍に高めます。 DeepSeek は一般的な人工知能を研究する会社です

AI は確かに数学を変えつつあります。最近、この問題に細心の注意を払っている陶哲軒氏が『米国数学協会会報』(米国数学協会会報)の最新号を送ってくれた。 「機械は数学を変えるのか?」というテーマを中心に、多くの数学者が意見を述べ、そのプロセス全体は火花に満ち、ハードコアで刺激的でした。著者には、フィールズ賞受賞者のアクシャイ・ベンカテシュ氏、中国の数学者鄭楽軍氏、ニューヨーク大学のコンピューター科学者アーネスト・デイビス氏、その他業界で著名な学者を含む強力な顔ぶれが揃っている。 AI の世界は劇的に変化しています。これらの記事の多くは 1 年前に投稿されたものです。

Google が推進する JAX のパフォーマンスは、最近のベンチマーク テストで Pytorch や TensorFlow のパフォーマンスを上回り、7 つの指標で 1 位にランクされました。また、テストは最高の JAX パフォーマンスを備えた TPU では行われませんでした。ただし、開発者の間では、依然として Tensorflow よりも Pytorch の方が人気があります。しかし、将来的には、おそらくより大規模なモデルが JAX プラットフォームに基づいてトレーニングされ、実行されるようになるでしょう。モデル 最近、Keras チームは、ネイティブ PyTorch 実装を使用して 3 つのバックエンド (TensorFlow、JAX、PyTorch) をベンチマークし、TensorFlow を使用して Keras2 をベンチマークしました。まず、主流のセットを選択します

Boston Dynamics Atlas は正式に電動ロボットの時代に突入します!昨日、油圧式アトラスが歴史の舞台から「涙ながらに」撤退したばかりですが、今日、ボストン・ダイナミクスは電動式アトラスが稼働することを発表しました。ボストン・ダイナミクス社は商用人型ロボットの分野でテスラ社と競争する決意を持っているようだ。新しいビデオが公開されてから、わずか 10 時間ですでに 100 万人以上が視聴しました。古い人が去り、新しい役割が現れるのは歴史的な必然です。今年が人型ロボットの爆発的な年であることは間違いありません。ネットユーザーは「ロボットの進歩により、今年の開会式は人間のように見え、人間よりもはるかに自由度が高い。しかし、これは本当にホラー映画ではないのか?」とコメントした。ビデオの冒頭では、アトラスは仰向けに見えるように地面に静かに横たわっています。次に続くのは驚くべきことです

今月初め、MIT やその他の機関の研究者らは、MLP に代わる非常に有望な代替案である KAN を提案しました。 KAN は、精度と解釈可能性の点で MLP よりも優れています。また、非常に少数のパラメーターを使用して、多数のパラメーターを使用して実行する MLP よりも優れたパフォーマンスを発揮できます。たとえば、著者らは、KAN を使用して、より小規模なネットワークと高度な自動化で DeepMind の結果を再現したと述べています。具体的には、DeepMind の MLP には約 300,000 個のパラメーターがありますが、KAN には約 200 個のパラメーターしかありません。 KAN は、MLP が普遍近似定理に基づいているのに対し、KAN はコルモゴロフ-アーノルド表現定理に基づいているのと同様に、強力な数学的基礎を持っています。以下の図に示すように、KAN は

目標検出は自動運転システムにおいて比較的成熟した問題であり、その中でも歩行者検出は最も初期に導入されたアルゴリズムの 1 つです。ほとんどの論文では非常に包括的な研究が行われています。ただし、サラウンドビューに魚眼カメラを使用した距離認識については、あまり研究されていません。放射状の歪みが大きいため、標準のバウンディング ボックス表現を魚眼カメラに実装するのは困難です。上記の説明を軽減するために、拡張バウンディング ボックス、楕円、および一般的な多角形の設計を極/角度表現に探索し、これらの表現を分析するためのインスタンス セグメンテーション mIOU メトリックを定義します。提案された多角形モデルの FisheyeDetNet は、他のモデルよりも優れたパフォーマンスを示し、同時に自動運転用の Valeo 魚眼カメラ データセットで 49.5% の mAP を達成しました。

テスラのロボット「オプティマス」の最新映像が公開され、すでに工場内で稼働可能となっている。通常の速度では、バッテリー(テスラの4680バッテリー)を次のように分類します:公式は、20倍の速度でどのように見えるかも公開しました - 小さな「ワークステーション」上で、ピッキング、ピッキング、ピッキング:今回は、それがリリースされたハイライトの1つビデオの内容は、オプティマスが工場内でこの作業を完全に自律的に行い、プロセス全体を通じて人間の介入なしに完了するというものです。そして、オプティマスの観点から見ると、自動エラー修正に重点を置いて、曲がったバッテリーを拾い上げたり配置したりすることもできます。オプティマスのハンドについては、NVIDIA の科学者ジム ファン氏が高く評価しました。オプティマスのハンドは、世界の 5 本指ロボットの 1 つです。最も器用。その手は触覚だけではありません

この論文では、自動運転においてさまざまな視野角 (遠近法や鳥瞰図など) から物体を正確に検出するという問題、特に、特徴を遠近法 (PV) 空間から鳥瞰図 (BEV) 空間に効果的に変換する方法について検討します。 Visual Transformation (VT) モジュールを介して実装されます。既存の手法は、2D から 3D への変換と 3D から 2D への変換という 2 つの戦略に大別されます。 2D から 3D への手法は、深さの確率を予測することで高密度の 2D フィーチャを改善しますが、特に遠方の領域では、深さ予測に固有の不確実性により不正確さが生じる可能性があります。 3D から 2D への方法では通常、3D クエリを使用して 2D フィーチャをサンプリングし、Transformer を通じて 3D と 2D フィーチャ間の対応のアテンション ウェイトを学習します。これにより、計算時間と展開時間が増加します。
