Подошла очередь форм.
Решил, что так, как писали мы раньше - создание формы в контроллере - некрасиво. Захотелось мне вынести формы в отдельную папочку forms
в руте модуля.
Первое, с чем приходится столкнуться, - номенклатура. Как помнится, у меня два модуля: default
и admin
. Соответственны и неймсппейсы. Т. е. в дефолтном модуле я создал уже ранее модель Default_Model_Feedback
в папке models
, а в админском - Admin_Model_User
в папке admin/models
. Аналогичным образом создаем и формы. Например, первая форма, которую я создал - форма логина Default_Form_Login
.
В начале меня вводило в ступор и непонимание то, что я не мог создать, например, файл forms/LoginForm.php
так, чтобы он увиделся аналогично контроллерам (ср. controllers/UserController.php
). Очевидно, таковое было обусловлено моим стремлением к перфекционизму: мне хотелось, чтобы всё было красиво, и сия пелена застилала мне глаза :) Однако, трезво взглянув на вещи, я вижу, что, пожалуй, я был не прав. Хотя вот что меня смутило. Согласно мануалу ZF, Zend_Application_Module_Autoloader, comes with the following mappings:
api/ => Api
forms/ => Form
models/ => Model
DbTable/ => Model_DbTable
plugins/ => Plugin
Т. е. выходит, что у нас будут, если будут, Default_Api_Foo
, Default_Plugin_Bar
etc.
Дальше. Создал я свой класс формы. В нем создаю конструктор, в который передаю $options = null
. Ну и внутри создаю форму, прежде вызвав конструктор предка:parent::__construct($options);
$this->setMethod('post')
->setAction('user/login')
->setName('loginForm');
$login = $this->createElement('text', 'login')
->setLabel('Логин');
$password = $this->createElement('password', 'password')
->setLabel('Пароль');
$submit = $this->createElement('submit', 'submit')
->setLabel('Войти');
$this->addElements(array($login, $password, $submit));
Внимание: конструктор ничего не возвращает! Вероятно, это логично, но я попался.
16 August, 2009
Мой опыт в создании модульного приложения на Zend Framework: Часть 4
Posted at 19:00
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment