|
|
@@ -1,8 +1,8 @@
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
<!-- Reviewed: no -->
|
|
|
-<!-- EN-Revision: 15103 -->
|
|
|
+<!-- EN-Revision: 15215 -->
|
|
|
<sect1 id="zend.form.forms">
|
|
|
- <title><classname>Zend_Form</classname> によるフォームの作成</title>
|
|
|
+ <title>Zend_Form によるフォームの作成</title>
|
|
|
|
|
|
<para>
|
|
|
<classname>Zend_Form</classname> クラスは、フォームの要素や
|
|
|
@@ -47,8 +47,7 @@ $form = new Zend_Form();
|
|
|
|
|
|
// 独自のフォームオブジェクト
|
|
|
$form = new My_Form()
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
<classname>Zend_Config</classname> のインスタンスあるいは配列で設定を渡すことができます。
|
|
|
@@ -58,8 +57,7 @@ $form = new My_Form()
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
// 設定オプションを渡します
|
|
|
$form = new Zend_Form($config);
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
<classname>Zend_Form</classname> は順次処理が可能です。
|
|
|
@@ -200,8 +198,7 @@ $form->addElement('text', 'foo');
|
|
|
|
|
|
// 要素の label オプションを渡します
|
|
|
$form->addElement('text', 'foo', array('label' => 'Foo:'));
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<note>
|
|
|
<title>addElement() における「流れるようなインターフェイス」の実装</title>
|
|
|
@@ -241,8 +238,7 @@ $foo = $form->getElement('foo');
|
|
|
|
|
|
// オブジェクトのプロパティとして
|
|
|
$foo = $form->foo;
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
時には、フォームにアタッチせずに要素を作成したいこともあるでしょう
|
|
|
@@ -254,8 +250,7 @@ $foo = $form->foo;
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
// $username は Zend_Form_Element_Text オブジェクトとなります
|
|
|
$username = $form->createElement('text', 'username');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<sect3 id="zend.form.forms.elements.values">
|
|
|
<title>値の設定と取得</title>
|
|
|
@@ -274,8 +269,7 @@ $values = $form->getValues();
|
|
|
|
|
|
// 'foo' 要素の値のみを取得します
|
|
|
$value = $form->getValue('foo');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
レンダリング前に、フォームに特定の値を設定したいこともあるでしょう。
|
|
|
@@ -286,8 +280,7 @@ $value = $form->getValue('foo');
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$form->setDefaults($data);
|
|
|
$form->populate($data);
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
逆に、値を設定したり検証したりした後でフォームをクリアしたいこともあるでしょう。
|
|
|
@@ -296,8 +289,7 @@ $form->populate($data);
|
|
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$form->reset();
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</sect3>
|
|
|
|
|
|
<sect3 id="zend.form.forms.elements.global">
|
|
|
@@ -338,8 +330,7 @@ $form->addElementPrefixPath('My_Foo_Validate',
|
|
|
$form->addElementPrefixPath('My_Foo_Decorator',
|
|
|
'My/Foo/Decorator',
|
|
|
'decorator');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</example>
|
|
|
|
|
|
<example id="zend.form.forms.elements.global.decorators">
|
|
|
@@ -360,8 +351,7 @@ $form->setElementDecorators(array(
|
|
|
'ViewHelper',
|
|
|
'Label'
|
|
|
));
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</example>
|
|
|
|
|
|
<example id="zend.form.forms.elements.global.decoratorsFilter">
|
|
|
@@ -398,8 +388,7 @@ $form->setElementDecorators(
|
|
|
'bar'
|
|
|
)
|
|
|
);
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
一方、この例では、ViewHelper デコレータと Label
|
|
|
@@ -419,8 +408,7 @@ $form->setElementDecorators(
|
|
|
),
|
|
|
false
|
|
|
);
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</example>
|
|
|
|
|
|
<note>
|
|
|
@@ -458,8 +446,7 @@ $form->setElementDecorators(
|
|
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$form->setElementFilters(array('StringTrim'));
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</example>
|
|
|
</sect3>
|
|
|
|
|
|
@@ -578,8 +565,7 @@ $form->setElementFilters(array('StringTrim'));
|
|
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$form->addDisplayGroup(array('username', 'password'), 'login');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
表示グループにアクセスするには、
|
|
|
@@ -593,8 +579,7 @@ $login = $form->getDisplayGroup('login');
|
|
|
|
|
|
// オーバーロードの使用
|
|
|
$login = $form->login;
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<note>
|
|
|
<title>読み込み不要なデフォルトのデコレータ</title>
|
|
|
@@ -612,8 +597,7 @@ $form->addDisplayGroup(
|
|
|
'foobar',
|
|
|
array('disableLoadDefaultDecorators' => true)
|
|
|
);
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
このオプションは、他のオプションと混用することもできます。
|
|
|
@@ -641,8 +625,7 @@ $form->addDisplayGroup(
|
|
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$form->addDisplayGroupPrefixPath('My_Foo_Decorator', 'My/Foo/Decorator');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</example>
|
|
|
|
|
|
<example id="zend.form.forms.displaygroups.global.decorators">
|
|
|
@@ -664,8 +647,7 @@ $form->setDisplayGroupDecorators(array(
|
|
|
'FormElements',
|
|
|
'Fieldset'
|
|
|
));
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</example>
|
|
|
</sect3>
|
|
|
|
|
|
@@ -690,8 +672,7 @@ $form->addDisplayGroup(
|
|
|
'user',
|
|
|
array('displayGroupClass' => 'My_DisplayGroup')
|
|
|
);
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
そのクラスがまだ読み込まれていない場合は、<classname>Zend_Form</classname>
|
|
|
@@ -707,8 +688,7 @@ $form->addDisplayGroup(
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
// すべての表示グループで 'My_DisplayGroup' クラスを使用します
|
|
|
$form->setDefaultDisplayGroupClass('My_DisplayGroup');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
これは、設定項目
|
|
|
@@ -940,8 +920,7 @@ $form->setDefaultDisplayGroupClass('My_DisplayGroup');
|
|
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$form->addSubForm($subForm, 'subform');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
サブフォームを取得するには、
|
|
|
@@ -954,8 +933,7 @@ $subForm = $form->getSubForm('subform');
|
|
|
|
|
|
// オーバーロードの使用
|
|
|
$subForm = $form->subform;
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
サブフォームは、親フォームの要素のひとつとして順次処理することができます。
|
|
|
@@ -981,8 +959,7 @@ $form->setSubFormDecorators(array(
|
|
|
'FormElements',
|
|
|
'Fieldset'
|
|
|
));
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</sect3>
|
|
|
|
|
|
<sect3 id="zend.form.forms.subforms.methods">
|
|
|
@@ -1051,8 +1028,7 @@ $form->setName('registration');
|
|
|
|
|
|
// 名前を取得します
|
|
|
$name = $form->getName();
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
アクション (フォームを送信したときに進む URL)
|
|
|
@@ -1065,8 +1041,7 @@ $name = $form->getName();
|
|
|
// アクションとメソッドを設定します
|
|
|
$form->setAction('/user/login')
|
|
|
->setMethod('post');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
フォームのエンコード形式を設定するには
|
|
|
@@ -1084,8 +1059,7 @@ $form->setAction('/user/login')
|
|
|
$form->setAction('/user/login')
|
|
|
->setMethod('post')
|
|
|
->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<note>
|
|
|
<para>
|
|
|
@@ -1101,8 +1075,7 @@ $form->setAction('/user/login')
|
|
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$numItems = count($form);
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
任意のメタデータを設定するには attribs アクセサを使用します。
|
|
|
@@ -1128,8 +1101,7 @@ $form->removeAttrib('onSubmit');
|
|
|
|
|
|
// すべての属性を削除します
|
|
|
$form->clearAttribs();
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</sect2>
|
|
|
|
|
|
<sect2 id="zend.form.forms.decorators">
|
|
|
@@ -1164,8 +1136,7 @@ $form->setDecorators(array(
|
|
|
array('HtmlTag', array('tag' => 'dl')),
|
|
|
'Form'
|
|
|
));
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
これは、次のような出力をします。
|
|
|
@@ -1177,8 +1148,7 @@ $form->setDecorators(array(
|
|
|
...
|
|
|
</dl>
|
|
|
</form>
|
|
|
-]]>
|
|
|
-</programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
フォームオブジェクトに設定した任意の属性は、
|
|
|
@@ -1197,8 +1167,7 @@ $form->setDecorators(array(
|
|
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$form = new Zend_Form(array('disableLoadDefaultDecorators' => true));
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
このオプションは、他のオプションと混用することもできます。
|
|
|
@@ -1231,8 +1200,7 @@ $form->addDecorator(array('FooBar' => 'HtmlTag'), array('tag' => 'div'));
|
|
|
|
|
|
// 後で、このように取得できます
|
|
|
$form = $element->getDecorator('FooBar');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
<code>addDecorators()</code> メソッドおよび
|
|
|
@@ -1253,8 +1221,7 @@ $form->addDecorators(
|
|
|
// 後で、このように取得できます
|
|
|
$htmlTag = $form->getDecorator('HtmlTag');
|
|
|
$fooBar = $form->getDecorator('FooBar');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</note>
|
|
|
|
|
|
<para>
|
|
|
@@ -1342,8 +1309,7 @@ echo $form->renderFieldset("<p>This is fieldset content</p>");
|
|
|
if (!$form->isValid($_POST)) {
|
|
|
// 検証に失敗しました
|
|
|
}
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
<code>isValid()</code> はすべての必須要素の検証を行います。
|
|
|
@@ -1359,8 +1325,7 @@ if (!$form->isValid($_POST)) {
|
|
|
if (!$form->isValidPartial($data)) {
|
|
|
// 検証に失敗しました
|
|
|
}
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
<code>isValidPartial()</code> は、
|
|
|
@@ -1376,8 +1341,7 @@ if (!$form->isValidPartial($data)) {
|
|
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$json = $form->processAjax($data);
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
こうすれば、単純に JSON レスポンスをクライアントに返すことができます。
|
|
|
@@ -1396,8 +1360,7 @@ $json = $form->processAjax($data);
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$codes = $form->getErrors();
|
|
|
$messages = $form->getMessages();
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<note>
|
|
|
<para>
|
|
|
@@ -1414,8 +1377,7 @@ $messages = $form->getMessages();
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$codes = $form->getErrors('username');
|
|
|
$messages = $form->getMessages('username');
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<note>
|
|
|
<para>
|
|
|
@@ -1796,8 +1758,7 @@ decorators.elements.decorator = "FormElements"
|
|
|
decorators.fieldset.decorator = "FieldSet"
|
|
|
decorators.fieldset.decorator.options.class = "zend_form"
|
|
|
decorators.form.decorator = "Form"
|
|
|
-]]>
|
|
|
-</programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
これは、XML や PHP の配列形式の設定ファイルにも簡単に置き換えることができます。
|
|
|
@@ -1884,8 +1845,7 @@ class My_Form_Login extends Zend_Form
|
|
|
));
|
|
|
}
|
|
|
}
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
このフォームのインスタンスを作成するのは、次のように簡単です。
|
|
|
@@ -1893,8 +1853,7 @@ class My_Form_Login extends Zend_Form
|
|
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
$form = new My_Form_Login();
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
そして、すべての機能はすでに準備済みの状態で、
|
|
|
@@ -1920,8 +1879,7 @@ class My_Form_Login extends Zend_Form
|
|
|
));
|
|
|
}
|
|
|
}
|
|
|
-]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
</sect2>
|
|
|
</sect1>
|
|
|
<!--
|