Zend_Form-QuickStart.xml 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.form.quickstart">
  5. <title>Szybki start z Zend_Form</title>
  6. <para>
  7. Ten przewodnik opisuje podstawy tworzenia, weryfikacji oraz
  8. renderowania formularzy za pomocą komponentu <classname>Zend_Form</classname>.
  9. </para>
  10. <sect2 id="zend.form.quickstart.create">
  11. <title>Tworzenie obiektu formularza</title>
  12. <para>
  13. Tworzenie obiektu formularza jest bardzo proste: należy, po prostu, utworzyć
  14. egzemplarz klasy <classname>Zend_Form</classname>:
  15. </para>
  16. <programlisting language="php"><![CDATA[
  17. $form = new Zend_Form;
  18. ]]>
  19. </programlisting>
  20. <para>
  21. W zaawansowanych przypadkach można rozszerzyć klasę
  22. <classname>Zend_Form</classname>, ale dla prostych formularzy wystarczy utworzenie
  23. i skonfigurowanie formularza za pomocą obiektu <classname>Zend_Form</classname>.
  24. </para>
  25. <para>
  26. Dla określenia akcji oraz metody wywołania formularza, można
  27. użyć metod dostępowych <methodname>setAction()</methodname> oraz
  28. <methodname>setMethod()</methodname>:
  29. </para>
  30. <programlisting language="php"><![CDATA[
  31. $form->setAction('/resource/process')
  32. ->setMethod('post');
  33. ]]>
  34. </programlisting>
  35. <para>
  36. Powyższy kod ustawia akcję formularza na adres <acronym>URL</acronym>
  37. "<filename>/resource/process</filename>" oraz metodę wykonania formularza na
  38. <acronym>HTTP</acronym> <acronym>POST</acronym>.
  39. Będzie to wzięte pod uwagę podczas renderowania formularza.
  40. </para>
  41. <para>
  42. Można ustawić dodatkowe atrybuty dla znacznika
  43. <emphasis>&lt;form&gt;</emphasis> używając metod <methodname>setAttrib()</methodname>
  44. lub <methodname>setAttribs()</methodname>. Przykładowo aby ustawić identyfikator,
  45. należy ustawić atrybut "<property>id</property>":
  46. </para>
  47. <programlisting language="php"><![CDATA[
  48. $form->setAttrib('id', 'login');
  49. ]]>
  50. </programlisting>
  51. </sect2>
  52. <sect2 id="zend.form.quickstart.elements">
  53. <title>Dodawanie elementów do formularza</title>
  54. <para>
  55. Formularz jest bezużyteczny jeśli nie posiada elementów.
  56. Komponent <classname>Zend_Form</classname> posiada kilkanaście domyślnych
  57. elementów które mogą być renderowane do postaci <acronym>XHTML</acronym> za pomocą
  58. klas pomocniczych <classname>Zend_View</classname>. Te elementy to:
  59. </para>
  60. <itemizedlist>
  61. <listitem><para>
  62. button (przycisk)
  63. </para></listitem>
  64. <listitem><para>
  65. checkbox (pole wyboru lub wiele pól za pomocą multiCheckbox)
  66. </para></listitem>
  67. <listitem><para>
  68. hidden (pole ukryte)
  69. </para></listitem>
  70. <listitem><para>
  71. image (obrazek)
  72. </para></listitem>
  73. <listitem><para>
  74. password (hasło)
  75. </para></listitem>
  76. <listitem><para>
  77. radio (pole opcji)
  78. </para></listitem>
  79. <listitem><para>
  80. reset (przycisk resetujący)
  81. </para></listitem>
  82. <listitem><para>
  83. select (lista zwykła oraz lista wielokrotnego wyboru)
  84. </para></listitem>
  85. <listitem><para>
  86. submit (przycisk wysyłający)
  87. </para></listitem>
  88. <listitem><para>
  89. text (pole tekstowe)
  90. </para></listitem>
  91. <listitem><para>
  92. textarea (wieloliniowe pole tekstowe)
  93. </para></listitem>
  94. </itemizedlist>
  95. <para>
  96. Istnieją dwie możliwości dodania elementów do formularza: utworzenie
  97. egzemplarza konkretnego elementu i przekazanie go do obiektu formularza lub
  98. po prostu przekazanie typu elementu i pozwolenie obiektowi
  99. <classname>Zend_Form</classname> na automatyczne utworzenie egzemplarzy
  100. obiektów określonego typu.
  101. </para>
  102. <para>
  103. Kilka przykładów:
  104. </para>
  105. <programlisting language="php"><![CDATA[
  106. // Utworzenie egzemplarza elementu i przekazanie go do obiektu formularza:
  107. $form->addElement(new Zend_Form_Element_Text('username'));
  108. // Przekazanie typu elementu do obiektu:
  109. $form->addElement('text', 'username');
  110. ]]>
  111. </programlisting>
  112. <para>
  113. Domyślnie, elementy te nie posiadają filtrów ani walidatorów.
  114. Oznacza to że należy samodzielnie skonfigurować dla nich
  115. walidatory i opcjonalnie filtry. Można to zrobić (a) przed
  116. przekazaniem elementu do formularza, (b) za pomocą opcji
  117. konfiguracyjnych przekazanych podczas tworzenia elementu poprzez
  118. obiekt <classname>Zend_Form</classname> lub (c) pobierając istniejący element
  119. z obiektu formularza i konfigurując go.
  120. </para>
  121. <para>
  122. Najpierw należy przyjrzeć się tworzeniu walidatorów dla konkretnego
  123. egzemplarza elementu. Można przekazać obiekt
  124. <classname>Zend_Validate_*</classname> lub nazwę walidatora który ma zostać
  125. użyty:
  126. </para>
  127. <programlisting language="php"><![CDATA[
  128. $username = new Zend_Form_Element_Text('username');
  129. // Przekazanie obiektu Zend_Validate_*:
  130. $username->addValidator(new Zend_Validate_Alnum());
  131. // Przekazanie nazwy walidatora:
  132. $username->addValidator('alnum');
  133. ]]>
  134. </programlisting>
  135. <para>
  136. Dla drugiego sposobu, można przekazać w trzecim parametrze metody
  137. tablicę z argumentami konstruktora wybranego walidatora.
  138. </para>
  139. <programlisting language="php"><![CDATA[
  140. // Przekazanie wzoru
  141. $username->addValidator('regex', false, array('/^[a-z]/i'));
  142. ]]>
  143. </programlisting>
  144. <para>
  145. (Drugi parametr jest używany aby określić czy niepowodzenie w
  146. weryfikacji ma przerwać następne weryfikacje czy nie; domyślnie
  147. ma wartość <constant>FALSE</constant>.)
  148. </para>
  149. <para>
  150. Można także określić element jako wymagany. Aby to osiągnąć należy
  151. użyć metody dostępowej lub przekazać opcję podczas tworzenia
  152. elementu. Oto pierwszy sposób:
  153. </para>
  154. <programlisting language="php"><![CDATA[
  155. // Ustawienie elementu jako wymaganego:
  156. $username->setRequired(true);
  157. ]]>
  158. </programlisting>
  159. <para>
  160. Gdy element jest wymagany, dodawany jest walidator 'NotEmpty' na
  161. sam początek łańcucha walidatorów, dzięki czemu można być pewnym,
  162. że element będzie posiadał wartość.
  163. </para>
  164. <para>
  165. Filtry są rejestrowane w taki sam sposób jak walidatory. Aby
  166. pokazać jak działają, można dodać filtr zamieniający znaki na małe
  167. litery:
  168. </para>
  169. <programlisting language="php"><![CDATA[
  170. $username->addFilter('StringtoLower');
  171. ]]>
  172. </programlisting>
  173. <para>
  174. Finalnie konfiguracja elementu może wyglądać tak:
  175. </para>
  176. <programlisting language="php"><![CDATA[
  177. $username->addValidator('alnum')
  178. ->addValidator('regex', false, array('/^[a-z]/'))
  179. ->setRequired(true)
  180. ->addFilter('StringToLower');
  181. // lub bardziej zwięźle:
  182. $username->addValidators(array('alnum',
  183. array('regex', false, '/^[a-z]/i')
  184. ))
  185. ->setRequired(true)
  186. ->addFilters(array('StringToLower'));
  187. ]]>
  188. </programlisting>
  189. <para>
  190. Tworzenie obiektu dla każdego z elementów formularza może być
  191. nieco kłopotliwe. Można spróbować użyć sposobu (b) przedstawionego
  192. wyżej. Podczas tworzenia nowego elementu metodą
  193. <methodname>Zend_Form::addElement()</methodname> jako fabryki, można
  194. opcjonalnie przekazać również opcje konfiguracyjne. Obejmuje to także
  195. konfigurację filtrów i walidatorów. Aby to zrobić można użyć kodu:
  196. </para>
  197. <programlisting language="php"><![CDATA[
  198. $form->addElement('text', 'username', array(
  199. 'validators' => array(
  200. 'alnum',
  201. array('regex', false, '/^[a-z]/i')
  202. ),
  203. 'required' => true,
  204. 'filters' => array('StringToLower'),
  205. ));
  206. ]]>
  207. </programlisting>
  208. <note>
  209. <para>
  210. Jeśli w kilku miejscach konfigurowane są elementy za pomocą tych samych
  211. opcji, można rozważyć stworzenie własnej klasy rozszerzającej
  212. klasę <classname>Zend_Form_Element</classname> i następnie użycie tej klasy do
  213. tworzenia własnych elementów. Może to oszczędzić nieco pracy.
  214. </para>
  215. </note>
  216. </sect2>
  217. <sect2 id="zend.form.quickstart.render">
  218. <title>Renderowanie formularza</title>
  219. <para>
  220. Renderowanie formularza jest proste. Większość elementów używa do
  221. tego klas pomocniczych <classname>Zend_View</classname>, więc potrzebny będzie
  222. do tego także obiekt widoku. Istnieją dwie możliwości: użycie metody
  223. formularza render() lub po prostu wyświetlenie formularza za pomocą
  224. konstrukcji echo.
  225. </para>
  226. <programlisting language="php"><![CDATA[
  227. // Jawnie wywołanie metody render() i przekazanie opcjonalnego obiektu widoku:
  228. echo $form->render($view);
  229. // Zakładając że obiekt widoku został wcześniej ustawiony za pomocą setView():
  230. echo $form;
  231. ]]>
  232. </programlisting>
  233. <para>
  234. Domyślnie obiekty <classname>Zend_Form</classname> oraz
  235. <classname>Zend_Form_Element</classname> używają obiektu widoku zainicjowanego
  236. w obiekcie <classname>ViewRenderer</classname>, co oznacza, że nie trzeba go
  237. ręcznie ustawiać dla wzorca MVC Zend Framework. Renderowanie
  238. formularza w skrypcie widoku jest wtedy bardzo proste:
  239. </para>
  240. <programlisting language="php"><![CDATA[
  241. <? echo $this->form ?>
  242. ]]>
  243. </programlisting>
  244. <para>
  245. <classname>Zend_Form</classname> używa "dekoratorów" do przeprowadzania
  246. renderowania. Te dekoratory mogą zastępować zawartość, dodawać
  247. treść na początku lub na końcu, a także mieć pełny wgląd w
  248. element przekazany do nich. Można użyć kilku dekoratorów aby
  249. uzyskać wymagany efekt. Domyślnie <classname>Zend_Form_Element</classname>
  250. używa czterech dekoratorów aby wygenerować kod wyjściowy. Wygląda
  251. to w taki sposób:
  252. </para>
  253. <programlisting language="php"><![CDATA[
  254. $element->addDecorators(array(
  255. 'ViewHelper',
  256. 'Errors',
  257. array('HtmlTag', array('tag' => 'dd')),
  258. array('Label', array('tag' => 'dt')),
  259. ));
  260. ]]>
  261. </programlisting>
  262. <para>
  263. (Gdzie &lt;HELPERNAME&gt; jest nazwą klasy pomocniczej widoku, która
  264. ma być użyta. Może ona różnić się dla różnych elementów.)
  265. </para>
  266. <para>
  267. Układ dekoratorów przedstawiony powyżej generuje następujący kod:
  268. </para>
  269. <programlisting language="html"><![CDATA[
  270. <dt><label for="username" class="required">Username</dt>
  271. <dd>
  272. <input type="text" name="username" value="123-abc" />
  273. <ul class="errors">
  274. <li>'123-abc' has not only alphabetic and digit characters</li>
  275. <li>'123-abc' does not match against pattern '/^[a-z]/i'</li>
  276. </ul>
  277. </dd>
  278. ]]></programlisting>
  279. <para>
  280. (Jednak kod jest inaczej sformatowany.)
  281. </para>
  282. <para>
  283. Można zmienić dekoratory używane przez element jeśli pożądany jest
  284. inny kod wyjściowy. Należy zapoznać się z rozdziałem poświęconym dekoratorom
  285. aby uzyskać więcej informacji.
  286. </para>
  287. <para>
  288. Formularz przechodzi poprzez wszystkie elementy i umieszcza je
  289. wewnątrz znacznika <acronym>HTML</acronym> <emphasis>&lt;form&gt;</emphasis>.
  290. Akcja i metoda wysyłania formularza podane podczas jego konfigurowania
  291. zostaną dołączone do znacznika<emphasis>&lt;form&gt;</emphasis>, tak samo jak
  292. inne atrybuty ustawione za pomocą metody <methodname>setAttribs()</methodname>.
  293. </para>
  294. <para>
  295. Formularz przechodzi przez elementy w takiej kolejności w jakiej
  296. były one zarejestrowane lub jeśli określony element zawiera odpowiedni
  297. atrybut, zostanie on użyty w celu ustalenia kolejności. Można
  298. ustawiać kolejność elementów używając metody:
  299. </para>
  300. <programlisting language="php"><![CDATA[
  301. $element->setOrder(10);
  302. ]]></programlisting>
  303. <para>
  304. Innym sposobem jest przekazanie kolejności jako opcji podczas tworzenia elementu:
  305. </para>
  306. <programlisting language="php"><![CDATA[
  307. $form->addElement('text', 'username', array('order' => 10));
  308. ]]></programlisting>
  309. </sect2>
  310. <sect2 id="zend.form.quickstart.validate">
  311. <title>Sprawdzanie poprawności formularza</title>
  312. <para>
  313. Po tym jak formularz zostanie wysłany, należy sprawdzić czy pomyślnie
  314. przeszedł walidację. Każdy element jest sprawdzany w oparciu o
  315. podane dane. Jeśli nie ma klucza odpowiadającego nazwie elementu, a
  316. element jest oznaczony jako wymagany, weryfikacja zostanie
  317. przeprowadzona w oparciu o pustą wartość <constant>NULL</constant>.
  318. </para>
  319. <para>
  320. Skąd pochodzą dane? Możesz użyć tablic <varname>$_POST</varname>,
  321. <varname>$_GET</varname> lub dowolnych innych źródeł danych
  322. (np. żądań do web serwisów):
  323. </para>
  324. <programlisting language="php"><![CDATA[
  325. if ($form->isValid($_POST)) {
  326. // dane są poprawne
  327. } else {
  328. // dane nie są poprawne
  329. }
  330. ]]></programlisting>
  331. <para>
  332. Przy korzystaniu z żądań AJAX, może zajść potrzeba przeprowadzenia
  333. weryfikacji pojedynczego elementu lub grupy elementów.
  334. Metoda <methodname>isValidPartial()</methodname> częściowo sprawdza formularz.
  335. W przeciwieństwie do metody <methodname>isValid()</methodname>, nie przeprowadza
  336. ona weryfikacji pól dla elementów których wartości nie zostały podane:
  337. </para>
  338. <programlisting language="php"><![CDATA[
  339. if ($form->isValidPartial($_POST)) {
  340. // dane we wszystkich elementach pomyślnie przyszły weryfikację
  341. } else {
  342. // jeden lub więcej elementów nie przeszło poprawnie weryfikacji
  343. }
  344. ]]>
  345. </programlisting>
  346. <para>
  347. Do częściowej weryfikacji formularza można także użyć metody
  348. <methodname>processAjax()</methodname>. W przeciwieństwie do metody
  349. <methodname>isValidPartial()</methodname>, zwraca ona łańcuch znaków w formacie
  350. JSON zawierający informacje o błędach.
  351. </para>
  352. <para>
  353. Zakładając że elementy zostały zweryfikowane i są poprawne, można
  354. pobrać przefiltrowane wartości:
  355. </para>
  356. <programlisting language="php"><![CDATA[
  357. $values = $form->getValues();
  358. ]]>
  359. </programlisting>
  360. <para>
  361. Jeśli potrzeba niefiltrowanych wartości, należy użyć:
  362. </para>
  363. <programlisting language="php"><![CDATA[
  364. $unfiltered = $form->getUnfilteredValues();
  365. ]]>
  366. </programlisting>
  367. </sect2>
  368. <sect2 id="zend.form.quickstart.errorstatus">
  369. <title>Pobieranie informacji o błędach</title>
  370. <para>
  371. Formularz nie przeszedł weryfikacji? W większości przypadków
  372. można po prostu powtórnie wyświetlić formularz, a błędy zostaną
  373. pokazane używając dekoratorów:
  374. </para>
  375. <programlisting language="php"><![CDATA[
  376. if (!$form->isValid($_POST)) {
  377. echo $form;
  378. // przekazanie go do obiektu widoku i renderowanie widoku
  379. $this->view->form = $form;
  380. return $this->render('form');
  381. }
  382. ]]>
  383. </programlisting>
  384. <para>
  385. Dostępne są dwie metody do sprawdzania błędów. Metoda
  386. <methodname>getErrors()</methodname> zwraca tablicę asocjacyjną zawierającą
  387. informacje o błędach w postaci nazwa elementu / kody (gdzie kody są
  388. tablicami kodów błędów). Metoda <methodname>getMessages()</methodname> zwraca
  389. tablicę asocjacyjną zawierającą informacje o błędach w postaci nazwa
  390. elementu / komunikaty (gdzie komunikaty są asocjacyjną tablicą w
  391. postaci kod / komunikat). Jeśli dany element nie zawiera błędów, nie
  392. będzie zawarty w tablicy.
  393. </para>
  394. </sect2>
  395. <sect2 id="zend.form.quickstart.puttingtogether">
  396. <title>Złożenie w całość</title>
  397. <para>
  398. Teraz można przystąpić do budowy prostego formularza logowania.
  399. Potrzebne będą elementy:
  400. </para>
  401. <itemizedlist>
  402. <listitem><para>nazwa użytkownika</para></listitem>
  403. <listitem><para>hasło</para></listitem>
  404. <listitem><para>przycisk wysyłający</para></listitem>
  405. </itemizedlist>
  406. <para>
  407. Na potrzeby przykładu można załóżyć że poprawna nazwa użytkownika powinna
  408. składać się jedynie ze znaków alfanumerycznych, powinna zaczynać
  409. się od litery, jej długość powinna zawierać się między 6 a 12
  410. znakami. Litery powinny zostać zamienione na małe. Hasło musi
  411. składać się minimalnie z 6 znaków. Wartość przycisku wysyłającego
  412. formularz można zignorować, więc nie musi podlegać walidacji.
  413. </para>
  414. <para>
  415. Aby zbudować formularz można skorzystać z metod konfiguracyjnych obiektu
  416. <classname>Zend_Form</classname>:
  417. </para>
  418. <programlisting language="php"><![CDATA[
  419. $form = new Zend_Form();
  420. $form->setAction('/user/login')
  421. ->setMethod('post');
  422. // Utworzenie i skonfigurowanie elementu zawierającego nazwę użytkownika:
  423. $username = $form->createElement('text', 'username');
  424. $username->addValidator('alnum')
  425. ->addValidator('regex', false, array('/^[a-z]+/'))
  426. ->addValidator('stringLength', false, array(6, 20))
  427. ->setRequired(true)
  428. ->addFilter('StringToLower');
  429. // Utworzenie i skonfigurowanie elementu zawierającego hasło:
  430. $password = $form->createElement('password', 'password');
  431. $password->addValidator('StringLength', false, array(6))
  432. ->setRequired(true);
  433. // Dodanie elementów do formularza:
  434. $form->addElement($username)
  435. ->addElement($password)
  436. // użycie metody addElement() jako fabryki tworzącej przycisk 'Zaloguj':
  437. ->addElement('submit', 'login', array('label' => 'Zaloguj'));
  438. ]]></programlisting>
  439. <para>
  440. Następnie należy utworzyć kontroler obsługujący formularz:
  441. </para>
  442. <programlisting language="php"><![CDATA[
  443. class UserController extends Zend_Controller_Action
  444. {
  445. public function getForm()
  446. {
  447. // tworzenie formularza jak wyżej
  448. return $form;
  449. }
  450. public function indexAction()
  451. {
  452. // renderowanie skryptu user/form.phtml
  453. $this->view->form = $this->getForm();
  454. $this->render('form');
  455. }
  456. public function loginAction()
  457. {
  458. if (!$this->getRequest()->isPost()) {
  459. return $this->_forward('index');
  460. }
  461. $form = $this->getForm();
  462. if (!$form->isValid($_POST)) {
  463. // Weryfikacja nieudana, ponowne wyświetlenie formularza
  464. $this->view->form = $form;
  465. return $this->render('form');
  466. }
  467. $values = $form->getValues();
  468. // Weryfikacja udana, można próbować uwierzytelnić
  469. }
  470. }
  471. ]]></programlisting>
  472. <para>
  473. Utworzenie skryptu widoku wyświetlającego formularz:
  474. </para>
  475. <programlisting language="php"><![CDATA[
  476. <h2>Zaloguj się:</h2>
  477. <?= $this->form ?>
  478. ]]></programlisting>
  479. <para>
  480. Jak nietrudno zauważyć, w kod kontrolera może wymagać trochę dodatkowej
  481. pracy: jeśli wysłane dane będą poprawne, należy przeprowadzić
  482. uwierzytelnienie używając np. klasy <classname>Zend_Auth</classname>.
  483. </para>
  484. </sect2>
  485. <sect2 id="zend.form.quickstart.config">
  486. <title>Użycie obiektu Zend_Config</title>
  487. <para>
  488. Wszystkie klasy <classname>Zend_Form</classname> można skonfigurować za pomocą
  489. komponentu <classname>Zend_Config</classname>. Można przekazać obiekt klasy
  490. <classname>Zend_Config</classname> do konstruktora lub przekazać go za pomocą
  491. metody <methodname>setConfig()</methodname>.
  492. Oto jak można utworzyć powyższy formularz używając pliku INI.
  493. Najpierw, biorąc pod uwagę zalecenia, należy umieścić konfigurację
  494. w sekcjach odnoszących się do typu
  495. wdrożenia aplikacji i skupić się na sekcji 'development'.
  496. Następnie należy utwórzyć sekcję dla danego kontrolera ('user'), oraz klucz
  497. dla formularza ('login'):
  498. </para>
  499. <programlisting language="ini"><![CDATA[
  500. [development]
  501. ; ogólna konfiguracja formularza
  502. user.login.action = "/user/login"
  503. user.login.method = "post"
  504. ; nazwa użytkownika
  505. user.login.elements.username.type = "text"
  506. user.login.elements.username.options.validators.alnum.validator = "alnum"
  507. user.login.elements.username.options.validators.regex.validator = "regex"
  508. user.login.elements.username.options.validators.regex.options.pattern = "/^[a-z]/i"
  509. user.login.elements.username.options.validators.strlen.validator = "StringLength"
  510. user.login.elements.username.options.validators.strlen.options.min = "6"
  511. user.login.elements.username.options.validators.strlen.options.max = "20"
  512. user.login.elements.username.options.required = true
  513. user.login.elements.username.options.filters.lower.filter = "StringToLower"
  514. ; hasło
  515. user.login.elements.password.type = "password"
  516. user.login.elements.password.options.validators.strlen.validator = "StringLength"
  517. user.login.elements.password.options.validators.strlen.options.min = "6"
  518. user.login.elements.password.options.required = true
  519. ; przycisk wysyłający
  520. user.login.elements.submit.type = "submit"
  521. ]]></programlisting>
  522. <para>
  523. Powyższe można przekazać do konstruktora obiektu formularza:
  524. </para>
  525. <programlisting language="php"><![CDATA[
  526. $config = new Zend_Config_Ini($configFile, 'development');
  527. $form = new Zend_Form($config->user->login);
  528. ]]></programlisting>
  529. <para>
  530. w ten sposób cały formularz został zdefiniowany.
  531. </para>
  532. </sect2>
  533. <sect2 id="zend.form.quickstart.conclusion">
  534. <title>Podsumowanie</title>
  535. <para>
  536. Dzięki temu przewodnikowi czytelnik powinien być na dobrej drodze do wykorzystania mocy
  537. i elastyczności komponentu <classname>Zend_Form</classname>. Aby uzyskać
  538. bardziej szczegółowe informacje należy zapoznać się z dalszymi częściami dokumentacji.
  539. </para>
  540. </sect2>
  541. </sect1>
  542. <!--
  543. vim:se ts=4 sw=4 et:
  544. -->