Zend:设置editAction()的问题,请指教

时间:2012-02-01 14:30:30

标签: php zend-framework zend-form

我在设置管理员编辑项目值的功能时遇到了一些困难。我在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请求的末尾提供ID时,表单在浏览器中加载得很好...但是,当我提交表单时,会抛出一个带有以下请求参数的异常:

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

我不知道为什么它会这样做...有什么我没看到的???任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

问题在于你的路线。 /admin/catalog/item/edit/:id的默认行为是像/controller/action/:param/:param/:param一样处理它,它将itemedit都作为参数而不是您的预期目的。尝试在你的引导程序中添加这样的东西:

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'))
    ); 

}

这允许您从路线中定义特定的控制器和操作。