我在设置管理员编辑项目值的功能时遇到了一些困难。我在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',
...
我不知道为什么它会这样做...有什么我没看到的???任何建议将不胜感激!
答案 0 :(得分:0)
问题在于你的路线。 /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'))
);
}
这允许您从路线中定义特定的控制器和操作。