Использование форм с Zend Framework - PullRequest
11 голосов
/ 23 марта 2009

Я относительно новичок в MVC и Zend Framework. При этом я чувствую, что мне трудно понять, где формы находятся в моей структуре каталогов. У меня есть модульная структура каталогов, поэтому я не знаю, должен ли быть один каталог форм или один в каждом каталоге модулей.

/application
    /modules/
        /default
            /controllers
            /views
        /admin
            /controllers
            /views

После того, как вы определили каталог для форм, задаете ли вы этот каталог в пути включения загрузочной версии? Или вы включаете форму в контроллер, в котором она используется?

Как вы используете формы с Zend Framework?

Ответы [ 8 ]

11 голосов
/ 11 сентября 2009

Уже немного поздно, но в текущей версии ZF это решено:

На следующей странице http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html В руководстве говорится:

30.3.2. Модуль Resource Autoloader 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», он будет искать в подкаталоге «resources /» каталога ресурсов файл с именем «Entry.php ». При использовании начальной загрузки модуля с Zend_Application экземпляр Zend_Application_Module_Autoloader будет создаваться по умолчанию для каждого отдельного модуля, что позволяет вам автоматически загружать ресурсы модуля.

Это, однако, требует использования Zend_Application

4 голосов
/ 23 августа 2011

добавьте это в файл 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;
    }

}
2 голосов
/ 23 марта 2009

По состоянию на март '09, лидеры мыслей ZF, похоже, все еще обсуждают лучшие способы все организовать. В состав Zend_Tool , который планируется выпустить в ZF v1.8, входит генератор строительных лесов. В настоящее время он находится в инкубаторе, я пробовал на прошлой неделе, и он работает, но в его текущем состоянии генерируется не так много компонентов.

Из примеров, которые я видел, кажется, что ими лучше управлять отдельно от моделей, с которыми они взаимодействуют (это из 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

Некоторые программисты предпочитают помещать большинство своих файлов в библиотеку, чтобы им не нужно было добавлять дополнительные пути включения:

/library
    /My
        /Form
            Contact.php

При условии, что папка библиотеки включена, вышеприведенный класс будет иметь имя:

My_Form_Contact

Удачи! Матф

1 голос
/ 02 августа 2010

инструмент команды zend может создавать формы для этого:

zf создать форму продаж продукта

где sales - это имя модуля, командный инструмент создает форму каталога внутри модуля sales и файл Product.php с классом:

class sales_Form_Product extends Zend_Form {

и вам нужно добавить определение de Zend_Application_Module_Autoloader, чтобы определить каталог вашего модуля

1 голос
/ 31 марта 2009

Мне лично нравится хранить их в папке с приложениями, так как я не думаю, что они принадлежат библиотеке, а наличие только одной папки облегчает их автозагрузку.

/application
/forms
/modules/
    /default
        /controllers
        /views
    /admin
        /controllers
        /views
/libray/
    /Zend

и я только что добавил путь к форме в include_path, и я готов.

1 голос
/ 23 марта 2009

Лично я нашел, что проще всего поместить каталог моего модуля в путь включения и назвать классы форм в шаблоне 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 необходимо использовать заглавные буквы модулей, форм и моделей для работы в чувствительной к регистру среде.

0 голосов
/ 14 декабря 2013
 $selectexamname = new Admin_Form_examresults_Selectexamname();
        $this->view->selectexamname = $selectexamname;

ваш класс должен определить в соответствии с этим форматом

class Admin_Form_examresults_Selectexamname extends Zend_Form {}
0 голосов
/ 24 марта 2009

Я положил все свои модели в папку в библиотеке. Понятие это название моей компании.

/application
/modules/
    /default
        /controllers
        /views
    /admin
        /controllers
        /views
/libray/
    /Zend
    /Notion
        /Form

Это позволяет легко включать и находить файлы, поскольку у вас уже есть папка библиотеки.

Notion_Form_Login
Notion_Db_Manager_Login
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...