getRequest()->getActionName(); if (in_array($_action, $_preparedActions)) { $method = '_'.$_action.'Action'; $this->_beforeAction(); $this->$method(); $this->_afterAction(); } } /** * Index action * @return void */ protected function _indexAction() { if ($this->getRequest()->getParam('ajax')) { $this->_forward('grid'); return; } $this->_view->loadLayout(); $this->_setActiveMenu($this->_activeMenu); $title = __('Manage %1', $this->_getModel(false)->getOwnTitle(true)); $this->_view->getPage()->getConfig()->getTitle()->prepend($title); $this->_addBreadcrumb($title, $title); $this->_view->renderLayout(); } /** * Grid action * @return void */ protected function _gridAction() { $this->_view->loadLayout(false); $this->_view->renderLayout(); } /** * New action * @return void */ protected function _newAction() { $this->_forward('edit'); } /** * Edit action * @return void */ public function _editAction() { $model = $this->_getModel(); $this->_getRegistry()->register('current_model', $model); $this->_view->loadLayout(); $this->_setActiveMenu($this->_activeMenu); $title = $model->getOwnTitle(); if ($model->getId()) { $breadcrumbTitle = __('Edit %1', $title); $breadcrumbLabel = $breadcrumbTitle; } else { $breadcrumbTitle = __('New %1', $title); $breadcrumbLabel = __('Create %1', $title); } $this->_view->getPage()->getConfig()->getTitle()->prepend(__($title)); $this->_view->getPage()->getConfig()->getTitle()->prepend( $model->getId() ? $this->_getModelName($model) : __('New %1', $title) ); $this->_addBreadcrumb($breadcrumbLabel, $breadcrumbTitle); // restore data $values = $this->_getSession()->getData($this->_formSessionKey, true); if ($this->_paramsHolder) { $values = isset($values[$this->_paramsHolder]) ? $values[$this->_paramsHolder] : null; } if ($values) { $model->addData($values); } $this->_view->renderLayout(); } /** * Retrieve model name * @param boolean $plural * @return string */ protected function _getModelName(\Magento\Framework\Model\AbstractModel $model) { return $model->getName() ?: $model->getTitle(); } /** * Save action * @return void */ public function _saveAction() { $request = $this->getRequest(); if (!$request->isPost()) { $this->getResponse()->setRedirect($this->getUrl('*/*')); } $model = $this->_getModel(); try { $params = $this->_paramsHolder ? $request->getParam($this->_paramsHolder) : $request->getParams(); $idFieldName = $model->getResource()->getIdFieldName(); if (isset($params[$idFieldName]) && empty($params[$idFieldName])) { unset($params[$idFieldName]); } $model->addData($params); $this->_beforeSave($model, $request); $model->save(); $this->_afterSave($model, $request); $this->messageManager->addSuccess(__('%1 has been saved.', $model->getOwnTitle())); $this->_setFormData(false); } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->messageManager->addError(nl2br($e->getMessage())); $this->_setFormData(); } catch (\Exception $e) { $this->messageManager->addException( $e, __('Something went wrong while saving this %1. %2', strtolower($model->getOwnTitle()), $e->getMessage() ) ); $this->_setFormData(); } $hasError = (bool)$this->messageManager->getMessages()->getCountByType( \Magento\Framework\Message\MessageInterface::TYPE_ERROR ); if ($request->getParam('isAjax')) { $block = $this->_objectManager->create('Magento\Framework\View\Layout')->getMessagesBlock(); $block->setMessages($this->messageManager->getMessages(true)); $this->getResponse()->setBody(json_encode( [ 'messages' => $block->getGroupedHtml(), 'error' => $hasError, 'model' => $model->toArray(), ] )); } else { if ($hasError || $request->getParam('back')) { $this->_redirect('*/*/edit', [$this->_idKey => $model->getId()]); } else { $this->_redirect('*/*'); } } } /** * Before model Save action * @return void */ protected function _beforeSave($model, $request) {} /** * After model action * @return void */ protected function _afterSave($model, $request) {} /** * Before action * @return void */ protected function _beforeAction() {} /** * After action * @return void */ protected function _afterAction() {} /** * Delete action * @return void */ protected function _deleteAction() { $ids = $this->getRequest()->getParam($this->_idKey); if (!is_array($ids)) { $ids = [$ids]; } $error = false; try { foreach($ids as $id) { $this->_objectManager->create($this->_modelClass)->setId($id)->delete(); } } catch (\Magento\Framework\Exception\LocalizedException $e) { $error = true; $this->messageManager->addError($e->getMessage()); } catch (\Exception $e) { $error = true; $this->messageManager->addException( $e, __("We can't delete %1 right now. %2", strtolower($this->_getModel(false)->getOwnTitle()), $e->getMessage() ) ); } if (!$error) { $this->messageManager->addSuccess( __('%1 have been deleted.', $this->_getModel(false)->getOwnTitle(count($ids) > 1)) ); } $this->_redirect('*/*'); } /** * Change status action * @return void */ protected function _massStatusAction() { $ids = $this->getRequest()->getParam($this->_idKey); if (!is_array($ids)) { $ids = [$ids]; } $model = $this->_getModel(false); $error = false; try { $status = $this->getRequest()->getParam('status'); $statusFieldName = $this->_statusField; if (is_null($status)) { throw new \Exception(__('Parameter "Status" missing in request data.')); } if (is_null($statusFieldName)) { throw new \Exception(__('Status Field Name is not specified.')); } foreach($ids as $id) { $this->_objectManager->create($this->_modelClass) ->load($id) ->setData($this->_statusField, $status) ->save(); } } catch (\Magento\Framework\Exception\LocalizedException $e) { $error = true; $this->messageManager->addError($e->getMessage()); } catch (\Exception $e) { $error = true; $this->messageManager->addException( $e, __("We can't change status of %1 right now. %2", strtolower($model->getOwnTitle()), $e->getMessage() ) ); } if (!$error) { $this->messageManager->addSuccess( __('%1 status have been changed.', $model->getOwnTitle(count($ids) > 1)) ); } $this->_redirect('*/*'); } /** * Go to config section action * @return void */ protected function _configAction() { $this->_redirect('admin/system_config/edit', ['section' => $this->_configSection()]); } /** * Set form data * @return $this */ protected function _setFormData($data = null) { $this->_getSession()->setData($this->_formSessionKey, is_null($data) ? $this->getRequest()->getParams() : $data); return $this; } /** * Get core registry * @return void */ protected function _getRegistry() { if (is_null($this->_coreRegistry)) { $this->_coreRegistry = $this->_objectManager->get('\Magento\Framework\Registry'); } return $this->_coreRegistry; } /** * Check is allowed access * * @return bool */ protected function _isAllowed() { return $this->_authorization->isAllowed($this->_allowedKey); } /** * Retrieve model object * @return \Magento\Framework\Model\AbstractModel */ protected function _getModel($load = true) { if (is_null($this->_model)) { $this->_model = $this->_objectManager->create($this->_modelClass); $id = (int)$this->getRequest()->getParam($this->_idKey); if ($id && $load) { $this->_model->load($id); } } return $this->_model; } }