Zend: Проблемы с настройкой editAction (), пожалуйста, сообщите - PullRequest
1 голос
/ 01 февраля 2012

У меня возникли некоторые трудности при настройке функций администратора для редактирования значений элементов. Я создал функцию editAction() в классе AdminItemController. Это содержится в модуле под названием catalog. Моя маршрутизация настроена следующим образом:

resources.router.routes.admin-catalog-edit.route = "/admin/catalog/item/edit/:id"
resources.router.routes.admin-catalog-edit.defaults.module = "catalog"
resources.router.routes.admin-catalog-edit.defaults.controller = "admin.item"
resources.router.routes.admin-catalog-edit.defaults.action = "edit"

Я создал собственный класс Zend_Form, и в этом классе я установил действие и метод для формы:

class My_Form_ItemAdd extends Zend_Form
{
    public function init()
    {
        $this->setAction('/admin/catalog/item/edit')
             ->setMethod('post');
        ...

В своем действии контроллера я создал экземпляр формы и передал ее представлению, которое будет отображено. Я также проверяю, является ли это POST (если это так, проверяйте и сохраняйте в базе данных), в противном случае проверяйте GET (если да, извлекайте ID и populate()):

class Catalog_AdminItemController extends Zend_Controller_Action
{
    ...
    public function editAction()
    {
        $form = new My_Form_ItemEdit();
        $this->view->form = $form;
        ...

Форма отлично загружается в браузере, когда я в конце предоставляю идентификатор для запроса GET, но ... при отправке формы выдается исключение со следующими параметрами запроса:

array (
    'controller' => 'admin',
    'action' => 'catalog',
    'item' => 'edit',
    'module' => 'default',
    ...

Я понятия не имею, почему он будет это делать ... я что-то не вижу ??? Любой совет будет высоко ценится!

1 Ответ

0 голосов
/ 01 февраля 2012

Проблема в вашем маршруте.Поведение по умолчанию для /admin/catalog/item/edit/:id состоит в том, чтобы обрабатывать его как /controller/action/:param/:param/:param, в котором параметры item и edit помещаются вместо ваших целей.Попробуйте добавить что-то вроде этого в ваш загрузчик:

protected function _initRoutes()
{
    // Get front controller
    $front = Zend_Controller_Front::getInstance();

    // Get router
    $router = $front->getRouter();

    // Add route
    $router->addRoute(
            'admin_item_edit',
            new Zend_Controller_Router_Route('admin/catalog/item/edit/:id',
                                        array('controller' => 'item',
                                              'action' => 'edit'))
    ); 

}

Это позволит вам определить конкретный контроллер и действие из маршрута.

...