ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Zend FrameworkコミュのZend_Formについての質問

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Zend_Formとはどういう思想に基づいて設計されたんでしょうか?

getForm()で作成したものをViewに出力する方法が2つあると思います。

1、getForm()内でHTMLを定義してViewで1行で出力

これだとロジックとViewの分離ができていない。

それともデザインは全てCSSでやってね!ということなのだろうか?


2、getForm()内でHTMLを定義してViewで一個ずつgetElementで取り出して
HTMLに埋め込む。どちらかと言えばこれの方が馴染みがある気もする。

さて設計者はどういう気持ちでZend_Formを作成したんでしょうかね?
予想とかでも構わないので教えて下さい。

質問の意味がわからなかったらすみません。

コメント(20)

Zend Frameworkのドキュメントは読みましたか?

Zend_Formだけに当てはまるものではありませんが、
概要の部分に"use-at-will (使いたいように使ってくれ)" 方式って言葉があります。

個々のコンポーネントはできるだけ他のコンポーネントに、
依存しないようとも書かれていますが、

コンポーネント間だけでなく、
使う人が自由に使えるように設計されていると思いますよ。
ありがとうございます。
すみません、使いたいところは読んでいましたが、肝心の最初は読んでいませんでした。。。

ただそうなるとフレームワークの「ソースコードの統一という概念」と
反対の概念を持つことになりますよね?その辺りって違和感があるのですが。

フレームワークの「ソースコードの統一という概念」
って事自体がちょっとわからないのですが、

フレームワークはあくまで雛形であって、
ソースコードの統一などはコーディング規約や、
コーディングパターンといったものに依存するのでは?

フレームワークあっての設計ではなくて、
設計があってこそのフレームワークだと思います。
なるほど、そういうことなんですね。
普段は結構自由にコーディングしている環境でして、思い違いをしていました。
設計あってこそのフレームワーク、勉強になりました。

ありがとうございました。
今、関連でV1.7のZend_Dojo_Form(Zend_Formを継承)を使ってるんですが、これ、面白いです。

> 1、getForm()内でHTMLを定義してViewで1行で出力
> これだとロジックとViewの分離ができていない。
> それともデザインは全てCSSでやってね!ということなのだろうか?

1の方式で使ってるんですけど、デコレーターによるカスタマイズ性がものすごくいいですね。
getFormは使ってないのですが、バージョンの違い?でしょうか。

ビューヘルパーやデコレーターを工夫してロジカルにビューを組み立てる感じで使っています。
サブフォームとデコレーターの与え方を工夫すると大概のことはできます。
Zend_Dojo_Formが好例だと思います。
どうしてもここだけは特殊なHTMLソースを入れたいっていうときも、
自前でデコレーターを書くか、ViewScriptデコレーターがあれば完全にカスタマイズできます。

ビューとロジックの分離っていう意味では、ビューヘルパーやデコレーターはビューの
うちかなって考えてるのと、フォームって結局、機能性と切り離せないものなので、
デコレーターっていう解決方法はすごく気に入ってます。

個人的な感想ばかり書いてしまいましたが、
何ができるかを調べてから設計するというのもありかも?と思います。
あぁ、getFormわかりました。
http://framework.zend.com/manual/ja/zend.form.quickstart.html#zend.form.quickstart.puttingtogether
このクイックスタートに出ているサンプルのアクションコントローラーで定義されてるやつですね。
失礼しました。。

このgetForm内でフォームを定義するとなると、アクションの中でビューを定義?って言う感じで
違和感があるかもしれませんね。

ドキュメントの中の他の例では、Zend_Formのサブクラスのinit内で定義する方法などが
紹介されていますが、私もこの方法を採用していまして、
この方法だと独立したオブジェクト内でMVCを分離して扱うのでアクションコントローラー
の中でビューを定義するのに比べて違和感がなかったのかもしれません。
Zend_Form において、
少しお伺いさせて頂きたいと思います。

フォームに年月日のプルダウンを追加したいのですが、
<?php echo $this->form; ?> で出力される内容は、
下記のように三段に分かれてしまいます。

<dl>
  <dt>年</dt>
  <dd><option /></dd>
  <dt>月</dt>
  <dd><option /></dd>
  <dt>日</dt>
  <dd><option /></dd>
</dl>

※ option タグは中身を省略して書いています。


これを、下記のように年月日のプルダウンが並ぶようにしたいのですが、
<?php echo $this->form; ?> を用いながらも実現させる方法はあるでしょうか。

<dl>
  <dt>年月日</dt>
  <dd><option />年<option />月<option />日</dd>
</dl>
年月日をDisplayGroupに入れてしまうのがオススメです。'legend' => '年月日'をDisplayGroupのオプションに渡します。
タグはdl dt ddではなく、fieldset legendになりますが、見栄えはCSSでどうにでもなりますよね。

どうしてもdl dt ddにする場合は、filedsetデコレーターをカスタマイズしたものを作るか、ViewScriptデコレーターでテンプレを書くかどちらかでできると思います。
肝心なことを書いてませんでした。個別の要素からdtddを使わないようにするには
$select->setDecorators(array('ViewHelper'));
のようにselectElementに指定するかコンストラクタオプションにセットします。
おおー!
回答ありがとうございます!

教えてもらった方法を試してみて、
ここまで出来ました!

<dt>&nbsp;</dt>
<dd>
  <fieldset>
    <legend>年月日</legend>
    <dl><select /><select /><select /></dl>
  </fieldset>
</dd>

でもデコレータがまだまだ良く分かって無くて、
select の後ろに 年、月、日 がつけられないです…。
どうすればよろしいでしょうか?

ラベルをフォーム要素の後ろに持って行くデコレータを作って、
年月日のそれぞれの要素に対して、デコレータを
設定すればいいんだろうな、って気はするんですが…。
ラベルデコレーターのオプションで後置できると思いますよ
placementをAPPENDにするといいと思います。
ViewScript の使い方がようやくわかりました!
一つ一つに好きなテンプレート割り当てられるので、
これでとりあえず、どんなHTMLにも対応できそうです!


本当にありがとうございました!
http://framework.zend.com/manual/ja/
↑日本語のマニュアルページ、3日前くらいから、
「このアドレスへのリクエストに対するサーバの自動転送設定がループしています。」
と出てアクセスできないのですが、みなさんはどうですか? (私の環境だけ?)
私のところの環境でも再現しました。
オンラインマニュアルが見れないのはかなり致命的ですね・・・ orz
> baysideさん

ご確認いただきありがとうございます。やはりそうでしたか。
その他の言語のマニュアルは全部大丈夫なのに日本語版だけリダイレクトがループしているようですね。
アーカイブをダウンロードしても、なぜかcssファイルしか入ってないようで...。(^^;
2日前、Zendにメール送ったのですが、返信がないようでした。
仕方ないので、しばらくは英語版で読むとしましょう。
日本語マニュアルページとアーカイブの件、今朝見たら直ってました。
> syoshidaさん

サイト自体の不具合もバグレポートで報告すれば良かったのですね。
参考になります。どうもありがとうございました。

ログインすると、残り3件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Zend Framework 更新情報

Zend Frameworkのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。