Использование форм с Zend Framework
Я относительно новичок в MVC и Zend Framework. Это, как говорится, я чувствую, что мне сложно определить, где формы принадлежат моей структуре каталогов. У меня модульная структура каталогов, поэтому я не знаю, должен ли быть один каталог форм или один в каждом каталоге модуля.
/application
/modules/
/default
/controllers
/views
/admin
/controllers
/views
Как только вы определили каталог для форм, задаете ли вы этот каталог в пути включения бутстрапа? Или вы включаете форму в контроллер, что она используется?
Как вы используете формы с Zend Framework?
Ответы
Ответ 1
Немного поздно, но в текущей версии ZF это было решено:
На следующей странице http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html
В руководстве указано:
30.3.2. Автозагрузчик ресурсов модуля
Zend Framework поставляется с конкретной реализацией Zend_Loader_Autoloader_Resource, которая содержит сопоставления типов ресурсов, которые охватывают стандартную структуру каталогов по умолчанию для приложений Zend Framework MVC. Этот загрузчик Zend_Application_Module_Autoloader имеет следующие сопоставления:
api/ => Api
forms/ => Form
models/ => Model
DbTable/ => Model_DbTable
plugins/ => Plugin
В качестве примера, если у вас есть модуль с префиксом "Blog_" и попытался создать экземпляр класса "Blog_Form_Entry", он будет искать в каталоге ресурсов "forms/" подкаталог для файла с именем "Entry.php" ".
При использовании модульных бутстрапов с Zend_Application экземпляр Zend_Application_Module_Autoloader будет создан по умолчанию для каждого дискретного модуля, что позволит вам автоматически загружать ресурсы модуля.
Это требует, однако, использования Zend_Application
Ответ 2
добавьте это в файл application/modules/yourmodule/Bootstrap.php.
class Yourmodule_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Yourmodule_',
'basePath' => APPLICATION_PATH .'/modules/yourmodule',
'resourceTypes' => array (
'form' => array(
'path' => 'forms',
'namespace' => 'Form',
),
'model' => array(
'path' => 'models',
'namespace' => 'Model',
),
)
));
return $autoloader;
}
}
Ответ 3
По состоянию на март '09 лидеры идей ZF все еще, кажется, обсуждают лучшие способы организовать все. В ZF v1.8 есть версия строительного леса в составе Zend_Tool. В настоящее время в инкубаторе я пробовал его на прошлой неделе, и он работает, но в его текущем состоянии не так много компонентов.
Из примеров, которые я видел, кажется, что их лучше всего управлять отдельно от моделей, с которыми они взаимодействуют (это от Zend Framework In Action):
/application
/modules/
/default
/controllers
/forms
ContactForm.php
LoginForm.php
RegisterForm.php
SupportForm.php
/models
Comment.php
User.php
Users.php
/views
/admin
/controllers
/views
Тем не менее, я также видел структурированную форму под каталогом модели. Мэтью Вейер О'Финни показывает, как использовать их для проверки на самих моделях:
/application
/modules/
/default
/controllers
/models
Comment.php
User.php
/Form
Comment.php
Login.php
Register.php
/views
/admin
/controllers
/views
Чтобы ваши файлы были автоматически включены, обязательно укажите свои классы, используя модель подчеркивания.
Например, когда Zend_Loader видит
class RegisterController extends Zend_Controller_Action
Он смотрит в php include_path для:
Zend/Controller/Action.php
Аналогично, если предположить первую структуру выше, если мы включим модуль 'default' в наш include_path:
# bootstrap.php
$rootDir = dirname(dirname(__FILE__));
define('ROOT_DIR', $rootDir);
set_include_path(get_include_path()
. PATH_SEPARATOR . ROOT_DIR . '/library/'
. PATH_SEPARATOR . ROOT_DIR . '/application/modules/default/'
);
include 'Zend/Loader.php';
Zend_Loader::registerAutoload();
Вы называете свои классы:
Forms_ContactForm
Models_User
Некоторые программисты предпочитают размещать большинство своих файлов в библиотеке, поэтому им не нужно добавлять дополнительные пути include:
/library
/My
/Form
Contact.php
Предполагая, что папка библиотеки включена, класс, указанный выше, будет называться:
My_Form_Contact
Удачи! Матф
Ответ 4
Лично мне было проще поместить мой каталог модулей в путь include и назвать мои классы форм в шаблоне Zend Loader.
Пример структуры каталогов (копирование из Matt):
/application
/modules/
/default
/controllers
/forms
Contact.php
Login.php
Register.php
Support.php
/models
Comment.php
User.php
Users.php
/views
/admin
/controllers
/views
Примеры имен классов форм:
Default_Forms_Contact
Default_Forms_Login
Default_Forms_Register
Default_Forms_Support
Я называю свои модели и плагины одинаково, чтобы все было просто.
Я надеюсь, что эта проблема будет исправлена в более поздних версиях Zend Framework.
UPDATE:
Эта структура не работает на платформах * nix. Обнаружил это с трудом! Zend Loader нуждается в папках модулей, форм и моделей, которые должны быть заглавными для работы в чувствительной к регистру среде.
Ответ 5
Мне лично нравится держать их в папке приложения, так как я не думаю, что они принадлежат к библиотеке, и только одна папка упрощает их автозагрузку.
/application
/forms
/modules/
/default
/controllers
/views
/admin
/controllers
/views
/libray/
/Zend
и я просто добавил путь формы к include_path, и мне хорошо идти.
Ответ 6
инструмент команды zend может создавать для него формы:
zf создать форму продаж продукта
где sales - это имя модуля, командный инструмент создает форму каталога внутри продаж модуля и файл Product.php с классом:
class sales_Form_Product extends Zend_Form {
и вам нужно добавить определение Zend_Application_Module_Autoloader, чтобы определить каталог вашего модуля
Ответ 7
$selectexamname = new Admin_Form_examresults_Selectexamname();
$this->view->selectexamname = $selectexamname;
ваш класс должен определить в соответствии с этим форматом
class Admin_Form_examresults_Selectexamname extends Zend_Form {}
Ответ 8
Я помещаю все свои модели в папку в библиотеке. Понятие - это название моей компании.
/application
/modules/
/default
/controllers
/views
/admin
/controllers
/views
/libray/
/Zend
/Notion
/Form
Это позволяет легко добавлять и находить файлы, поскольку у вас уже есть папка с библиотекой.
Notion_Form_Login
Notion_Db_Manager_Login