I have created an admin grid, but it is not showing the edit form.
My files :
1.
Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule.php
<?php
namespace Stw\Skipredirectmodule\Block\Adminhtml;
class Skipredirectmodule extends \Magento\Backend\Block\Widget\Grid\Container
{
protected function _construct()
{
$this->_controller = 'adminhtml_skipredirectmodule';
$this->_blockGroup = 'Stw\Skipredirectmodule';
$this->_headerText = __('Custom Settings');
$this->_addButtonLabel = __('Add Custom Page');
parent::_construct();
}
}
Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Grid.php
<?php
namespace Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule;
class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
{
protected $moduleManager;
protected $_setsFactory;
protected $_productFactory;
protected $_type;
protected $_status;
protected $_collectionFactory;
protected $_visibility;
protected $_websiteFactory;
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Backend\Helper\Data $backendHelper,
\Magento\Store\Model\WebsiteFactory $websiteFactory,
\Stw\Skipredirectmodule\Model\ResourceModel\Skipredirectmodule\Collection $collectionFactory,
\Magento\Framework\Module\Manager $moduleManager,
array $data = []
) {
$this->_collectionFactory = $collectionFactory;
$this->_websiteFactory = $websiteFactory;
$this->moduleManager = $moduleManager;
parent::__construct($context, $backendHelper, $data);
}
protected function _construct()
{
parent::_construct();
$this->setId('skipredirectmoduleGrid');
$this->setDefaultSort('skipredirectmodule_id');
$this->setDefaultDir('ASC');
$this->setSaveParametersInSession(true);
$this->setUseAjax(true);
}
protected function _prepareCollection()
{
try{
$collection =$this->_collectionFactory->load();
$this->setCollection($collection);
parent::_prepareCollection();
return $this;
}
catch(Exception $e)
{
echo $e->getMessage();die;
}
}
protected function _prepareColumns()
{
$this->addColumn(
'skipredirectmodule_id',
[
'header' => __('ID'),
'type' => 'number',
'index' => 'skipredirectmodule_id',
'header_css_class' => 'col-id',
'column_css_class' => 'col-id'
]
);
$this->addColumn(
'skipredirectmodule_countryid',
[
'header' => __('Title'),
'index' => 'skipredirectmodule_countryid',
'class' => 'column2'
]
);
$this->addColumn(
'status',
[
'header' => __('Status'),
'index' => 'status',
'class' => 'column3',
'type' => 'options',
'options' => array(
1 => 'Enabled',
2 => 'Disabled',
),
]
);
$this->addColumn(
'action',
[
'header' => __('Action'),
'index' => 'action',
'class' => 'column1',
'type' => 'action',
'getter' => 'getId',
'actions' => array(
array(
'caption' => __('Edit'),
'url' => array('base'=> '*/*/edit'),
'field' => 'id',
)
),
'filter' => false,
'sortable' => false,
'index' => 'stores',
'is_system' => true,
]
);
return parent::_prepareColumns();
}
protected function _prepareMassaction()
{
$this->setMassactionIdField('skipredirectmodule_id');
$this->getMassactionBlock()->setFormFieldName('skipredirectmodule');
$this->getMassactionBlock()->addItem(
'delete',
array(
'label' => __('Delete'),
'url' => $this->getUrl('skipredirectmodule/*/massDelete'),
'confirm' => __('Are you sure?')
)
);
return $this;
}
public function getRowUrl($row)
{
return $this->getUrl(
'skipredirectmodule/*/edit',
['id' => $row->getId()]
);
}
}
3.
Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit.php
<?php
namespace Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule;
class Edit extends \Magento\Backend\Block\Widget\Form\Container
{
protected function _construct()
{
$this->_objectId = 'id';
$this->_blockGroup = 'Stw_Skipredirectmodule';
$this->_controller = 'adminhtml_skipredirectmodule';
parent::_construct();
$this->buttonList->update('save', 'label', __('Save Setting'));
$this->buttonList->update('delete', 'label', __('Delete Setting'));
$this->buttonList->add(
'saveandcontinue',
array(
'label' => __('Save and Continue Edit'),
'class' => 'save',
'data_attribute' => array(
'mage-init' => array('button' => array('event' => 'saveAndContinueEdit', 'target' => '#edit_form'))
)
),
-100
);
$this->_formScripts[] = "
function toggleEditor() {
if (tinyMCE.getInstanceById('block_content') == null) {
tinyMCE.execCommand('mceAddControl', false, 'hello_content');
} else {
tinyMCE.execCommand('mceRemoveControl', false, 'hello_content');
}
}
";
}
public function getHeaderText()
{
if ($this->_coreRegistry->registry('skipredirectmodule_data')->getId()) {
return __("Edit Item '%1'", $this->escapeHtml($this->_coreRegistry->registry('skipredirectmodule_data')->getTitle()));
} else {
return __('Admin Panel');
}
}
}
4.
Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit\Tabs.php
<?php
namespace Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit;
class Tabs extends \Magento\Backend\Block\Widget\Tabs
{
protected function _construct()
{
parent::_construct();
$this->setId('skipredirectmodule_skipredirectmodule_tabs');
$this->setDestElementId('edit_form');
$this->setTitle(__('Custom Module'));
}
}
5.
Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit\Form.php
<?php
namespace Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit;
class Form extends \Magento\Backend\Block\Widget\Form\Generic
{
protected $_customerAccountService;
protected function _prepareForm()
{
$form = $this->_formFactory->create(
array(
'data' => array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/save'),
'method' => 'post',
'enctype' => 'multipart/form-data'
)
)
);
$form->setUseContainer(true);
$this->setForm($form);
return parent::_prepareForm();
}
}
6.
Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit\Tab\Form.php
<?php
namespace Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit\Tab;
class Form extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface
{
protected $_systemStore;
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Data\FormFactory $formFactory,
\Magento\Store\Model\System\Store $systemStore,
array $data = array()
) {
$this->_systemStore = $systemStore;
parent::__construct($context, $registry, $formFactory, $data);
}
protected function _prepareForm()
{
$model = $this->_coreRegistry->registry('skipredirectmodule_skipredirectmodule');
$isElementDisabled = false;
$form = $this->_formFactory->create();
$form->setHtmlIdPrefix('page_');
$fieldset = $form->addFieldset('skipredirectmodule_form', array('legend' => __('Skip Redirect Settings')));
if ($model->getId()) {
$fieldset->addField('id', 'hidden', array('name' => 'id'));
}
$fieldset->addField(
'column1',
'text',
array(
'name' => 'column1',
'label' => __('column 1'),
'title' => __('column 1'),
)
);
$fieldset->addField(
'column2',
'text',
array(
'name' => 'column2',
'label' => __('column 2'),
'title' => __('column 2'),
)
);
$fieldset->addField(
'column3',
'text',
array(
'name' => 'column3',
'label' => __('column3'),
'title' => __('column3'),
)
);
if (!$model->getId()) {
$model->setData('status', $isElementDisabled ? '2' : '1');
}
$form->setValues($model->getData());
$this->setForm($form);
return parent::_prepareForm();
}
public function getTabLabel()
{
return __('General');
}
public function getTabTitle()
{
return __('General');
}
public function canShowTab()
{
return true;
}
public function isHidden()
{
return false;
}
protected function _isAllowedAction($resourceId)
{
return $this->_authorization->isAllowed($resourceId);
}
}
7.
Stw\Skipredirectmodule\view\adminhtml\layout\skipredirectmodule_skipredirectmodule_index.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<update handle="styles"/>
<update handle="skipredirectmodule_grid"/>
<body>
<referenceContainer name="content">
<block class="Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule" name="admin.skipredirectmodule.grid"/>
</referenceContainer>
</body>
</page>
8.
Stw\Skipredirectmodule\view\adminhtml\layout\skipredirectmodule_skipredirectmodule_edit.xml
<?xml version="1.0" encoding="UTF-8"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
<update handle="editor"/>
<body>
<referenceContainer name="content">
<block class="Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit" name="skipredirectmodule_skipredirectmodule_edit"/>
</referenceContainer>
<referenceContainer name="left">
<block class="Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit\Tabs" name="skipredirectmodule_skipredirectmodule_edit_tabs">
<block class="Stw\Skipredirectmodule\Block\Adminhtml\Skipredirectmodule\Edit\Tab\Form" name="skipredirectmodule_skipredirectmodule_edit_tab_form"/>
<action method="addTab">
<argument name="name" xsi:type="string">form_section</argument>
<argument name="block" xsi:type="string">stw_skipredirectmodule_edit_tab_form</argument>
</action>
<!--CedAddTab-->
</block>
</referenceContainer>
</body>
</page>
Please help me to solve this issue. Any help will be appreciated. Thanks.
Best Answer
You are missing controller NewAction. After that, add in execute()
Btw, you should use Magento UI component :)