2008-09-13 25 views
5

私は現在、PHPでフォームを生成するためにHTML_QuickFormで遊んでいます。それは、自分自身のJavaScriptを挿入したり、特定の要素の表示とグループ化をカスタマイズするのは難しいという点で限られているようです。PHP QuickFormに代わるもの?

柔軟性の高いQuickFormの代替品はありますか?

答えて

5

Javascriptをフォーム要素に挿入することが難しい場合は、PrototypeまたはjQueryなどのJavaScriptフレームワークの使用を検討してください。そこでは、イベント処理をフォームコントロールに注入するタスクを集中化できます。

これは、HTMLフォームコードにイベントハンドラを挿入する必要がないということです。代わりに、それらのイベントを他の場所から登録します。例えば、プロトタイプであなたはこのような何かを書くことができるようになります

$('myFormControl').observe('click', myClickFunction) 

はまたanother questionへの回答を見てみましょう。

/EDIT:HTML_QuickFormを使用してカスタム属性、したがってイベントハンドラをフォーム要素に挿入することもできます。しかし、上記の方法は優れています。

+0

ご提案いただきありがとうございます。それは非常に便利な音と私は間違いなくそれをチェックアウトします。私からの – Readonly

5

私は、Zend FrameworkZend_Formパッケージが特に柔軟であることを発見しました。このコンポーネントをZend_Dojoとともに使用すると、一般的なjavascriptフォームヘルパーを迅速に実装できます。しかし、このコンポーネントは、使用するライブラリに関しては不可知論者ですが、Dojoを正式にサポートします。このコンポーネントでは、グループ化、複数ページのフォーム、カスタムデコレータ、バリデーターなどの機能も使用できるため、柔軟性が向上します。

1

私は2番目にZend_Formを使用します。

[main] 
vessel.form.method = "post" 

vessel.form.elements.name.type = "text" 
vessel.form.elements.name.name = "name" 
vessel.form.elements.name.options.label = "Name: " 
vessel.form.elements.name.options.required = true 

vessel.form.elements.identifier_type.type = "select" 
vessel.form.elements.identifier_type.name = "identifier_type" 
vessel.form.elements.identifier_type.options.label = "Identifier type: " 
vessel.form.elements.identifier_type.options.required = true 
vessel.form.elements.identifier_type.options.multioptions.IMO Number = "IMO Number"; 
vessel.form.elements.identifier_type.options.multioptions.Registry organisation and Number = "Registry organisation and Number"; 
vessel.form.elements.identifier_type.options.multioptions.SSR Number = "SSR Number"; 

vessel.form.elements.identifier.type = "text" 
vessel.form.elements.identifier.name = "identifier" 
vessel.form.elements.identifier.options.label = "Identifier: " 
vessel.form.elements.identifier.options.required = true 
vessel.form.elements.identifier.options.filters.lower.filter = "StringToUpper" 

vessel.form.elements.email.type = "text" 
vessel.form.elements.email.name = "email" 
vessel.form.elements.email.options.label = "Email: " 
vessel.form.elements.email.options.required = true 

vessel.form.elements.owner_id.type = "hidden" 
vessel.form.elements.owner_id.name = "owner_id" 
vessel.form.elements.owner_id.options.required = true 

; submit button 
vessel.form.elements.submit.type = "submit" 
vessel.form.elements.submit.name = "Update" 
vessel.form.elements.submit.option.value = "Update" 
4

私はOnLampのため、この記事を書いた:それはあなたが非常に迅速フォームを定義することを可能にする優れたiniファイル形式の実装を持っているAutofilled PHP Forms

と私の牛肉のHTML_QuickFormとZend_Formの他のすべてのフォーム - 私が見つけることができるフレームワークを扱うには、フォームを生成するためのコードを書くと仮定しているようです。しかし、それは私の開発プロセスと一致しませんでした。ここでは、HTMLテンプレートで指定されたページのLOOKから始め、機能を追加します。 (通常はデータベースから)起動する形で行くべきデータをフェッチ

  1. :世界の私の見解で

    、フォームの取り扱いがに沸きます。

  2. フォーム(通常はテンプレート)のHTMLコードを取得します。
  3. Mushing1と2をまとめて結果を出力する。
  4. 送信されたフォームデータを取得し、検証します。
  5. エラーメッセージと無効なデータを含むフォームを再表示するか、OR
  6. おめでとうございます。

fillInFormValues()は2、3、5を簡単にします。

+0

+1。私はあなたに全面的かつあなたのfillInFormValues()クラスの外観が本当に好きであることに同意します。 – da5id

1

Zend_Formを使用すると、フォームで視覚的に開始し、その後バックワードを処理できます。

これは、すべてのデコレータを削除し、あなたがこのようなものだろうviewscript ViewScriptデコレータ

$this->form->setDecorators(array(array('ViewScript', array('viewScript' => 'forms/aform.phtml')))); 

そして、その中でそれらを交換することによって行われます:あなたは、

<?=$this->element->title->renderViewHelper()?> 

は、このアプローチに行くをすることができます基本的にフォームで必要なことをしてください。

Zend_Formのもう一つの素晴らしい点は、他の要素をカプセル化できるカスタム要素を作成できることです。たとえば、テキストエリアを出力する要素と、JavaScriptをWYSIWYG領域に変換するJavascriptを持つことができます。

0

私はそれについて何も言えませんが、先日、私はclonefishフォームライブラリを横断しました。それは私のしおりリストに「これを後で見る」ように終わるのに十分に有望だった。