こんにちは。 この記事では、Djangoの同様のモジュールに触発されて作成したKohanaフレームワーク用のフォームモジュールを紹介します。
背景や考えを深く掘り下げることはせず、その点までまっすぐ進みます。 最初に、欠点について説明します。
- モジュールは未加工です。 もちろん、これは彼が何も知らないことを意味するものではなく、まったく役に立たないということではなく、スケーリングと少しのリファクタリングが必要であることを意味するだけです。 ドキュメントの作業も同様です。
- リファクタリングについて。 私は誠意をこめてコードをきれいに保とうとしましたが、ほとんどの場合それをなんとかすることさえできましたが、だれも完璧ではなく、少数の場所がファイルの操作を傷つけませんでした。
- 特定の量の重要ではない機能が欠落しています。
利点:
- ジャンゴ形式で観察できる分散構造は保持されています。 フォームはFieldクラスのインスタンスで構成されており、FieldクラスはWidgetクラスに関連付けられています。 これにより、カスタマイズの機会が豊富にあります。
- データ検証を使用したORMモデルからのフォームの自動生成およびPOSTからのデータの自動保存。
- 各ウィジェットはデフォルトのCohanビューであり、ウィジェットの新しいテーマを簡単に作成したり、既存のテーマをすばやく調整したりできます。 このため、モジュール自体のソースコードにアクセスする必要はありません。
カットの下の詳細。
使用方法:
フォーム作成
<?php defined('SYSPATH') OR die('No direct access allowed.'); class Form_Login extends Form { public static function meta() { return array( "fields" => array( "login" => Field::factory("Varchar"), "password" => Field::factory("Password"), ), "options" => array(
利用可能なフィールドタイプ
- メール
- 非表示
- 画像
- Int
- パスワード
- テキスト
- タイムスタンプ
- バルチャー
- Int unsigned
フォームの表示方法
見せて
<form> <?php echo $form; ?> <input type="submit" value="Add"/> </form>
ブートストラップスタイルで表示する
<form method="POST" role="form"> <?php foreach ($form as $field): ?> <div class="form-group"> <?php $field->css_class(array("form-control")); ?> <?php foreach ($field->errors() as $error): ?> <div class="alert alert-danger"> <?php echo $error; ?> </div> <?php endforeach; ?> <?php echo $field; ?> </div> <? endforeach; ?> <input type="submit" class="btn btn-primary" value="Add"/> </form>
モデルフォームを作成する
class Form_Article extends ModelForm { public static function meta() { return array( "fields" => array(
データベース内の特定のエンティティのフォームを作成します
Form::factory("Article", array(), $id);
特定のデータセット用のフォームを作成する
Form::factory("Article", array("title" => "Hello, Habr!"));
モデルフォームを取得して保存する
public function action_add() { if ($this->request->method() == "POST") { $form = Form::factory("Article", $this->request->post()); $form->add_field( Field::factory("Hidden") ->name("user") ->value(Auth::instance() ->get_user()) ); if ($form->validate()) $form->save(); } }
フォームセットを作成する
<?php defined('SYSPATH') OR die('No direct access allowed.'); class Formset_News extends Formset { public static function meta() { return array( "base_form" => "News", "theme" => "bootstrap" ); } }
FormsetはIteratorも実装しているため、各要素に簡単にアクセスできます。
要するに、これは現在実装されているすべての機能です。 当然、コードのクリーンさの点と他のいくつかの面の両方に欠点があります。 そして、ここでこのモジュールを公開することで、オープンソースコミュニティが対応し、共同の努力により、Kohanaフレームワークの下でフォームを操作するための適切なモジュールを最終的に作成できることを願っています。
すべてのコードはgithub-
kohana-formで利用できます。フォークを作成し、プルリクエストを送信し、「Issues」に書き込むことができます。 私はコメントとアドバイスを喜んでいます。