Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Form.php
Go to the documentation of this file.
1 <?php
7 
13 class Form extends \Magento\Backend\Block\Widget\Form\Generic
14 {
18  protected $_sessionData = null;
19 
23  protected $_allStores = null;
24 
28  protected $_requireStoresFilter = false;
29 
33  protected $_formValues = [];
34 
40  protected $_adminhtmlData = null;
41 
45  protected $_systemStore;
46 
50  protected $_rewriteFactory;
51 
55  protected $optionProvider;
56 
67  public function __construct(
68  \Magento\Backend\Block\Widget\Context $context,
69  \Magento\Framework\Registry $registry,
70  \Magento\Framework\Data\FormFactory $formFactory,
71  \Magento\UrlRewrite\Model\OptionProvider $optionProvider,
72  \Magento\UrlRewrite\Model\UrlRewriteFactory $rewriteFactory,
73  \Magento\Store\Model\System\Store $systemStore,
74  \Magento\Backend\Helper\Data $adminhtmlData,
75  array $data = []
76  ) {
77  $this->optionProvider = $optionProvider;
78  $this->_rewriteFactory = $rewriteFactory;
79  $this->_systemStore = $systemStore;
80  $this->_adminhtmlData = $adminhtmlData;
81  parent::__construct($context, $registry, $formFactory, $data);
82  }
83 
89  protected function _construct()
90  {
91  parent::_construct();
92  $this->setId('urlrewrite_form');
93  $this->setTitle(__('Block Information'));
94  }
95 
102  protected function _initFormValues()
103  {
104  $model = $this->_getModel();
105  $this->_formValues = [
106  'store_id' => $model->getStoreId(),
107  'entity_type' => $model->getEntityType(),
108  'entity_id' => $model->getEntityId(),
109  'request_path' => $model->getRequestPath(),
110  'target_path' => $model->getTargetPath(),
111  'redirect_type' => $model->getRedirectType(),
112  'description' => $model->getDescription(),
113  ];
114 
115  $sessionData = $this->_getSessionData();
116  if ($sessionData) {
117  foreach (array_keys($this->_formValues) as $key) {
118  if (isset($sessionData[$key])) {
119  $this->_formValues[$key] = $sessionData[$key];
120  }
121  }
122  }
123 
124  return $this;
125  }
126 
133  protected function _prepareForm()
134  {
135  $this->_initFormValues();
136 
137  // Prepare form
139  $form = $this->_formFactory->create(
140  ['data' => ['id' => 'edit_form', 'use_container' => true, 'method' => 'post']]
141  );
142 
143  $fieldset = $form->addFieldset('base_fieldset', ['legend' => __('URL Rewrite Information')]);
144 
145  $fieldset->addField(
146  'entity_type',
147  'hidden',
148  [
149  'name' => 'entity_type',
150  'value' => $this->_formValues['entity_type']
151  ]
152  );
153 
154  $fieldset->addField(
155  'entity_id',
156  'hidden',
157  [
158  'name' => 'entity_id',
159  'value' => $this->_formValues['entity_id']
160  ]
161  );
162 
163  $this->_prepareStoreElement($fieldset);
164 
165  $fieldset->addField(
166  'request_path',
167  'text',
168  [
169  'label' => __('Request Path'),
170  'title' => __('Request Path'),
171  'name' => 'request_path',
172  'required' => true,
173  'value' => $this->_formValues['request_path']
174  ]
175  );
176 
177  $fieldset->addField(
178  'target_path',
179  'text',
180  [
181  'label' => __('Target Path'),
182  'title' => __('Target Path'),
183  'name' => 'target_path',
184  'required' => true,
185  'disabled' => false,
186  'value' => $this->_formValues['target_path']
187  ]
188  );
189 
190  $fieldset->addField(
191  'redirect_type',
192  'select',
193  [
194  'label' => __('Redirect Type'),
195  'title' => __('Redirect Type'),
196  'name' => 'redirect_type',
197  'options' => $this->optionProvider->toOptionArray(),
198  'value' => $this->_formValues['redirect_type']
199  ]
200  );
201 
202  $fieldset->addField(
203  'description',
204  'textarea',
205  [
206  'label' => __('Description'),
207  'title' => __('Description'),
208  'name' => 'description',
209  'cols' => 20,
210  'rows' => 5,
211  'value' => $this->_formValues['description'],
212  'wrap' => 'soft'
213  ]
214  );
215 
216  $this->setForm($form);
217  $this->_formPostInit($form);
218 
219  return parent::_prepareForm();
220  }
221 
228  protected function _prepareStoreElement($fieldset)
229  {
230  if ($this->_storeManager->isSingleStoreMode()) {
231  $fieldset->addField(
232  'store_id',
233  'hidden',
234  ['name' => 'store_id', 'value' => $this->_storeManager->getStore(true)->getId()]
235  );
236  } else {
237  $storeElement = $fieldset->addField(
238  'store_id',
239  'select',
240  [
241  'label' => __('Store'),
242  'title' => __('Store'),
243  'name' => 'store_id',
244  'required' => true,
245  'value' => $this->_formValues['store_id']
246  ]
247  );
248  try {
249  $stores = $this->_getStoresListRestrictedByEntityStores($this->_getEntityStores());
250  } catch (\Magento\Framework\Exception\LocalizedException $e) {
251  $stores = [];
252  $storeElement->setAfterElementHtml($e->getMessage());
253  }
254  $storeElement->setValues($stores);
255  if ($this->_getModel()->getIsAutogenerated()) {
256  $storeElement->setReadonly(true);
257  }
259  $renderer = $this->getLayout()->createBlock(
260  \Magento\Backend\Block\Store\Switcher\Form\Renderer\Fieldset\Element::class
261  );
262  $storeElement->setRenderer($renderer);
263  }
264  }
265 
272  protected function _formPostInit($form)
273  {
274  $form->setAction(
275  $this->_adminhtmlData->getUrl('adminhtml/*/save', ['id' => $this->_getModel()->getId()])
276  );
277  return $this;
278  }
279 
285  protected function _getSessionData()
286  {
287  if ($this->_sessionData === null) {
288  $this->_sessionData = $this->_backendSession->getData('url_rewrite_data', true);
289  }
290  return $this->_sessionData;
291  }
292 
298  protected function _getModel()
299  {
300  if (!$this->hasData('url_rewrite')) {
301  $this->setUrlRewrite($this->_rewriteFactory->create());
302  }
303  return $this->getUrlRewrite();
304  }
305 
311  protected function _getAllStores()
312  {
313  if ($this->_allStores === null) {
314  $this->_allStores = $this->_systemStore->getStoreValuesForForm();
315  }
316 
317  return $this->_allStores;
318  }
319 
325  protected function _getEntityStores()
326  {
327  return $this->_getAllStores();
328  }
329 
338  private function _getStoresListRestrictedByEntityStores(array $entityStores)
339  {
340  $stores = $this->_getAllStores();
341  if ($this->_requireStoresFilter) {
342  foreach ($stores as $i => $store) {
343  if (isset($store['value']) && $store['value']) {
344  $found = false;
345  foreach ($store['value'] as $k => $v) {
346  if (isset($v['value']) && in_array($v['value'], $entityStores)) {
347  $found = true;
348  } else {
349  unset($stores[$i]['value'][$k]);
350  }
351  }
352  if (!$found) {
353  unset($stores[$i]);
354  }
355  }
356  }
357  }
358 
359  return $stores;
360  }
361 }
setForm(\Magento\Framework\Data\Form $form)
Definition: Form.php:112
__()
Definition: __.php:13
__construct(\Magento\Backend\Block\Widget\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\Data\FormFactory $formFactory, \Magento\UrlRewrite\Model\OptionProvider $optionProvider, \Magento\UrlRewrite\Model\UrlRewriteFactory $rewriteFactory, \Magento\Store\Model\System\Store $systemStore, \Magento\Backend\Helper\Data $adminhtmlData, array $data=[])
Definition: Form.php:67
$i
Definition: gallery.phtml:31