2011 年の深センでのユニバーシアード大会が近づいていたため、深セン大学はボランティア サービス ステーションを設立したいと考えていました。その奉仕のために私は青年団委員会に逮捕されました。その過程で、私は小さなフォーム ツールキットを作成しました。検証機能は私自身が実装したものではなく、Kohana_Validate (Kohana V3.0x ブランチ) に依存しています。しかし、私は「J2EE Disgusting Mode」の指示に従って、フォームの繰り返しの送信を防ぐための同期トークンを取得しました。このコンポーネントは抽象化レイヤーも設定します。検証コードもトークンのサブクラスとして統合できると思います。でも、今は時間がないので、先にコードを共有して、販売されるのを待ちます~
- namespace Form;
- use VolunteerFormAbstractForm;
- class NewsPoster extends AbstractForm
- {
- /**
- * プリセットフォーム要素をすべて追加します
- *
- * @abstract
- */
- public function bindingAllElement()
- {
- $this->bindToken(' valid_token')
- ->addElement('ニュース タイトル', 'タイトル',
- array(
- 'not_empty' => null,
- 'max_length' => array(60)
- ),
- array(
- 'trim ' => null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- ->addElement('短縮URL', 'urlName',
- array(
- 'max_length' => array(50 ) ,
- 'regex' => array('~^[a-zA-Z0-9-%]+$~')
- ),
- array(
- 'trim' => null,
- 'urlencode' = > ; null,
- ))
- ->addElement('keyword', 'keyWords',
- array(
- 'max_length' => array(100),
- ),
- array(
- 'trim' => null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- ->addElement('ニュース著者と記者', 'author',
- array(
- 'max_length' => array(60),
- ),
- array(
- 'trim' => null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- ->addElement('ニュースエディタ', 'エディタ',
- array(
- 'max_length ' = > array(60),
- ),
- array(
- 'trim' => null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- ->addElement('ニュースソース', 'ソース',
- array(
- 'max_length' => array(60),
- ),
- array(
- 'trim' => null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- -> ;addElement('ニュース カテゴリ', 'カテゴリ',
- array(
- 'not_empty' => null,
- 'digit' => null,
- 'regex' => array('~^[1- 9] d*$~')
- ),
- array())
- ->addElement('cover image', 'cover_image',
- array(),
- array(
- 'trim' => null,
- ' urlencode' => null,
- ))
- ->addElement('メディア情報が含まれます', 'mediaTag',
- array(
- 'not_empty' => null,
- 'digit' => null,
- '正規表現' = > array('~^[0123]$~')
- ),
- array())
- ->addElement('ニュース概要', '概要',
- array(
- 'max_length' => array (255 ),
- ),
- array(
- 'trim' => null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- ->addElement('リリースステータス', '状態',
- array(
- 'not_empty' => null,
- 'digit' => null,
- 'regex' => array('~^[01]$~')
- ),
- array())
- -> ;addElement ('「ホームページに表示するかどうか」オプション', 'showInHome',
- array(
- 'boolean' => null,
- ),
- array())
- ->addElement('ニュースコンテンツ', 'content ',
- array(
- 'not_empty' => null,
- ),
- array(
- 'tidy_parse_string' => array(
- array(
- 'indent' => true,
- 'output-xhtml' => true、
- 'clean' => true、
- 'drop-font-tags'=> true、
- 'show-body-only'=> true
- )、'UTF8')、
- 'trim' => ; null
- ));
- }
- }
コードをコピーします
- public function action_GET()
- {
- // URL 内の ID を取得します
- $id = $this->request->param('id', null);
-
- // トークンを送信しますビューレイヤー (フォームの非表示フィールドに配置)
- $this->view['token'] = FormNewsPoster::getToken()->useToken();
- }
-
- public function action_POST()
- {
- $id = $this->request->param('id', null);
-
- $form = FormNewsPoster::factory($_POST);
- $form->bindAllElement();
-
- if ($ form- >checkForm()) {
- // 検証に合格しました。ドメイン モデルを呼び出して操作を実行します~
- $this->view['success'] = true;
- } else {
- $this->view ['success' ] = false;
- // エラー メッセージをビュー レイヤに送り返す
- $this->view['message'] = array_values($form->getMessage());
- }
- }
コードをコピー
|