PHP / Zend Framework 2 / CRUD - 如何为多个操作,多个视图构建控制器


PHP / Zend Framework 2 / CRUD - How to structure controller for several actions, several views?

前言

我正在开发一个 Web 应用程序,我一直在从我以前编写的现有 ASP.NET Web 表单应用程序进行调整。 我对该应用程序的大部分逻辑都在后端代码后面。

在创建应用程序并希望使用MVC将应用程序更改为另一种技术之后,我决定使用PHP/Zend Framework 2,以便我能够发展对MVC和PHP的理解,从而使代码更加结构化。

到目前为止我做了什么...

我有已经可以创建新记录的详细信息表单(即创建 CRUD 的一部分)。

到目前为止,我的视图文件夹看起来像这样

 view
   |
   --action-item
       |
       --details
       |    |
       |    --index.phtml    <--single view template to handle CRUD
       |
       --summary
            |
            --index.phtml    <--separate view not related to details

所需路线模板

  localhost/actionitem/create             <-- C (Create New Record)
  localhost/actionitem/view/1             <-- R (Read first element)
  localhost/actionitem/update/1           <-- U (Update first element)
  localhost/actionitem/delete/1           <-- D (Delete first element)

控制器操作方法

/* @var $actionItemTable ActionItemTable */
    public function summaryAction()
    {
        return new ViewModel(array(
            'actionitems' => $this->getActionItemTable()->fetchAll(),
        ));       
    }
    public function detailsAction()
    {
        $dbAdapter = $this->getServiceLocator()->get('Zend'Db'Adapter'Adapter');
        $form = new 'Application'Form'ActionItemForm($dbAdapter);
        return ['form' => $form];
    }
    public function createAction()
    {
        $dbAdapter = $this->getServiceLocator()->get('Zend'Db'Adapter'Adapter');
        $form = new 'Application'Form'ActionItemForm($dbAdapter);
        $request = $this->getRequest();
        if($request->isPost())
        {
            $request = $this->getRequest();
            $actionitem = new ActionItem();
            if($request->isPost())
            {               
                $form->setData($request->getPost());
                if ($form->isValid())
                {
                    $actionitem->exchangeArray($form->getData());
                    $this->getActionItemTable()->saveActionItem($actionitem);
                }
            }
        }
        return ['form' => $form];
    }

问题

构建操作以处理 CRUD 操作的适当方法是什么,将控制器划分为单独的控制器是否是一个好主意?

任何帮助或建议将不胜感激...

也许你应该考虑采用 RESTful 方法。

ZF2 为此有一个AbstractRestfulController类。使用此控制器,您可以轻松地将创建,读取更新和删除操作映射到它们各自的POSTGETPUT/PATCHDELETE http方法。