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 class。使用此控制器,您可以轻松地将创建、读取更新和删除操作映射到它们各自的 POSTGETPUT/PATCHDELETE http 方法。