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。使用此控制器,您可以轻松地将创建、读取更新和删除操作映射到它们各自的 POST
、GET
、PUT
/PATCH
和 DELETE
http 方法。
前言
我正在开发一个 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。使用此控制器,您可以轻松地将创建、读取更新和删除操作映射到它们各自的 POST
、GET
、PUT
/PATCH
和 DELETE
http 方法。