これは、データ編集フォームを生成するために使用できる非常に便利なコンポーネントであり、dbo フォームと dbo フォームのループネストを実現し、それを 1 つのフォームで制御することができます。 dbo をサポート カスタム ウィジェット コンポーネントがフォーム内で再びネストされます。
多くの PHP フレームワークが関数内でフォーム生成を記述することは理解できますが、フォーム生成時にユーザー関数を循環的に呼び出すことによるパフォーマンス コストを受け入れることはできません。この場合、コードのパフォーマンスは PHP と HTML を組み合わせたものよりもはるかに高くなります。ループ実行機能のことです。
さらに、ほとんどの場合、データ オブジェクトの構造がわかっており、データ オブジェクトの各フィールドの値の型を定義しているため、手動でフォームを作成したり、選択を使用してコードを使用したりする必要はありません。 、textareaか何かを使用します。
- //操作対象のオブジェクトのデータ
- // $target は MST_DBO に基づくインスタンスである必要があります
- if (!isset($data) || !is_object($data) || ! $data instanceof MST_DBO) {
- echo '$data not a MST_DBO instance!';
- }
- else {
- // 関連するモジュールを取得します
- $model = get_class($data);
- // $columns を定義します
- //定義でない場合は、MST_DBO インターフェースに従ってデフォルトで取得されます
- if (!isset($columns))
- $columns = $data->getFormColumns($data);
- if (empty($columns) || !is_array( $columns) ) {
- echo 'フォーム列の定義を解除します!';
- }
- else {
-
- // このモジュールのプレフィックスを生成します
- if (!isset($prefix))
- $prefix = strto lower($model);
- else
- $prefix = MST_String::tableize($prefix);
-
- if (!isset($id))
- $id = $prefix .
-
- if (!isset($class))
- $class = $prefix . '-form';
-
- $errors = $data->getErrors();
-
- // フォーム設定を初期化します
- // 送信されたアクションをカスタマイズします
- if (!isset($action))
- $action = $this- >params->uri;
-
- // メソッド
- if (!isset($method))
- $method = 'post';
- else {
- $method = strto lower((string)$method);
- if ( $method != 'get' && $method != 'post')
- $method = 'post';
- }
-
- // アップロードする必要がありますか if (!isset($isUpload)) $isUpload = true;
-
- // 送信ボタンのテキストをカスタマイズします
- if (!isset($submitText)) $submitText = 'Submit';
-
- // ラベル部分の幅をカスタマイズします
- if (!isset($headWidth) )) $headWidth = 130;
- $ headWidth = is_numeric($headWidth) && $headWidth > 0 ? $headWidth : 120;
-
- if (!isset($ continueForm)) $ continueForm = false;
-
-
- // オーバーロード
- if (!isset($lineStart )) $lineStart = 1;
- ?>
-
- }
- }
- ?>
复制代
- $this->widget('base/dbo_form', array(
- 'data' => $this->list,
- ));
-
复制代
- class Testimonial extends MST_DBO {
- protected static
- $columns = array(
- 'firstname' => array('text','title' => 'First Name', ' require' => 'min' => 'max' => 32),
- 'lastname' => '姓' ' => 1, 'min' => 1, 'avator' => array('title' => 'max' => 256) ,
- 'age_group' => array('title' => '年齢層', 'require' => 1),
- 'secret' => array('textarea','title' => ' Secret', 'require' => 1, 'min' => 600),
-
- public function getFormColumns() {
- if (GB_PERSSIONS == 地域::ROOT) {
- $columns['region_id'] = array(
- 'select',
- 'title' => ' リージョン ',
- 'optionsType' => 'list',
- 'options' => リージョン::find ('all', array('select' => 'id, name')),
- );
- }
- else {
- $columns['region_id'] = array(
- 'hidden',
- 'default' = > GB_PERSSIONS,
- );
- }
- $columns = array_merge($columns,self::$columns);
- $columns['age_group'] = array('widget', 'base/age_group', array(
- 'プレフィックス' => '体験談',
- ), 'タイトル' => '年齢層');
- $columns['avator'] = array('widget', 'base/testmonial_upload', array(
- 'prefix' => 'testimonial',
- ), 'title' => ' Avator');
-
- return $columns;
- }
-
- public function beforeCreate(& $data) {
- $data['created_at'] = time();
- }
-
- public function getAge() {
- $ageGroup = array(
- 0 => '--',
- 1 => '18 歳未満',
- 2 => '19 ? 25',
- 3 => '26 ? 35',
- 4 => ' 36 ? 45',
- 5 => '46 ? 55',
- 6 => '56 以上',
- return isset($this['age_group']]) ? $ageGroup[$this['age_group']] : $ageGroup[0];
- }
-
- public function getAvator() {
- return empty($this['avator']) ? httpUri('images/avator.png') : httpUri($this['avator']);
- }
-
- // これは MST_DBO の検索方法の重ロード
- static public function find($args = array( ), $params = null, $isArray = false) {
- if (define('GB_PERSSIONS') && GB_PERSSIONS == Regional::ROOT) {
- self::initFind($args, $params, $isArray);
- return parent::find($args, $params, $isArray);
- }
- else {
- self::initFind($args, $params, $isArray);
- if (isset($args['where'])) {
- $args['where'][0] .= ' AND リージョン ID = ?';
- $args['where'][] = GB_PERSSIONS;
- }
- else {
- $args['where'] = array( 'region_id = ?', GB_PERSSIONS);
- }
- returnparent::find($args, $params, $isArray);
- }
- }
- }
-
-
- 复制代
|