私は現在、PHPでフォームを生成するためにHTML_QuickFormで遊んでいます。それは、自分自身のJavaScriptを挿入したり、特定の要素の表示とグループ化をカスタマイズするのは難しいという点で限られているようです。PHP QuickFormに代わるもの?
柔軟性の高いQuickFormの代替品はありますか?
私は現在、PHPでフォームを生成するためにHTML_QuickFormで遊んでいます。それは、自分自身のJavaScriptを挿入したり、特定の要素の表示とグループ化をカスタマイズするのは難しいという点で限られているようです。PHP QuickFormに代わるもの?
柔軟性の高いQuickFormの代替品はありますか?
Javascriptをフォーム要素に挿入することが難しい場合は、PrototypeまたはjQueryなどのJavaScriptフレームワークの使用を検討してください。そこでは、イベント処理をフォームコントロールに注入するタスクを集中化できます。
これは、HTMLフォームコードにイベントハンドラを挿入する必要がないということです。代わりに、それらのイベントを他の場所から登録します。例えば、プロトタイプであなたはこのような何かを書くことができるようになります
$('myFormControl').observe('click', myClickFunction)
はまたanother questionへの回答を見てみましょう。
/EDIT:HTML_QuickFormを使用してカスタム属性、したがってイベントハンドラをフォーム要素に挿入することもできます。しかし、上記の方法は優れています。
私は、Zend FrameworkのZend_Formパッケージが特に柔軟であることを発見しました。このコンポーネントをZend_Dojoとともに使用すると、一般的なjavascriptフォームヘルパーを迅速に実装できます。しかし、このコンポーネントは、使用するライブラリに関しては不可知論者ですが、Dojoを正式にサポートします。このコンポーネントでは、グループ化、複数ページのフォーム、カスタムデコレータ、バリデーターなどの機能も使用できるため、柔軟性が向上します。
私は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"
私はOnLampのため、この記事を書いた:それはあなたが非常に迅速フォームを定義することを可能にする優れたiniファイル形式の実装を持っているAutofilled PHP Forms
と私の牛肉のHTML_QuickFormとZend_Formの他のすべてのフォーム - 私が見つけることができるフレームワークを扱うには、フォームを生成するためのコードを書くと仮定しているようです。しかし、それは私の開発プロセスと一致しませんでした。ここでは、HTMLテンプレートで指定されたページのLOOKから始め、機能を追加します。 (通常はデータベースから)起動する形で行くべきデータをフェッチ
、フォームの取り扱いがに沸きます。
fillInFormValues()は2、3、5を簡単にします。
+1。私はあなたに全面的かつあなたのfillInFormValues()クラスの外観が本当に好きであることに同意します。 – da5id
Zend_Formを使用すると、フォームで視覚的に開始し、その後バックワードを処理できます。
これは、すべてのデコレータを削除し、あなたがこのようなものだろうviewscript ViewScriptデコレータ
$this->form->setDecorators(array(array('ViewScript', array('viewScript' => 'forms/aform.phtml'))));
そして、その中でそれらを交換することによって行われます:あなたは、
<?=$this->element->title->renderViewHelper()?>
は、このアプローチに行くをすることができます基本的にフォームで必要なことをしてください。
Zend_Formのもう一つの素晴らしい点は、他の要素をカプセル化できるカスタム要素を作成できることです。たとえば、テキストエリアを出力する要素と、JavaScriptをWYSIWYG領域に変換するJavascriptを持つことができます。
私はそれについて何も言えませんが、先日、私はclonefishフォームライブラリを横断しました。それは私のしおりリストに「これを後で見る」ように終わるのに十分に有望だった。
ご提案いただきありがとうございます。それは非常に便利な音と私は間違いなくそれをチェックアウトします。私からの – Readonly