Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Input.php
Go to the documentation of this file.
1 <?php
80 namespace Magento\Framework\Filter;
81 
82 class Input implements \Zend_Filter_Interface
83 {
87  protected $_objectManager;
88 
93  {
94  $this->_objectManager = $objectManager;
95  }
96 
102  protected $_filters = [];
103 
112  public function addFilter($name, $filter, $placement = \Zend_Filter::CHAIN_APPEND)
113  {
114  if ($placement == \Zend_Filter::CHAIN_PREPEND) {
115  array_unshift($this->_filters[$name], $filter);
116  } else {
117  $this->_filters[$name][] = $filter;
118  }
119  return $this;
120  }
121 
128  public function appendFilter(\Zend_Filter_Interface $filter)
129  {
130  return $this->addFilter($filter, \Zend_Filter::CHAIN_APPEND);
131  }
132 
139  public function prependFilter($filter)
140  {
141  return $this->addFilter($filter, \Zend_Filter::CHAIN_PREPEND);
142  }
143 
157  public function addFilters(array $filters)
158  {
159  $this->_filters = array_merge_recursive($this->_filters, $filters);
160  return $this;
161  }
162 
169  public function setFilters(array $filters)
170  {
171  $this->_filters = $filters;
172  return $this;
173  }
174 
181  public function getFilters($name = null)
182  {
183  if (null === $name) {
184  return $this->_filters;
185  } else {
186  return $this->_filters[$name] ?? null;
187  }
188  }
189 
196  public function filter($data)
197  {
198  return $this->_filter($data);
199  }
200 
211  protected function _filter(array $data, &$filters = null, $isFilterListSimple = false)
212  {
213  if (null === $filters) {
215  }
216  foreach ($data as $key => $value) {
217  if (!$isFilterListSimple && !empty($filters[$key])) {
218  $itemFilters = $filters[$key];
219  } elseif ($isFilterListSimple && !empty($filters)) {
220  $itemFilters = $filters;
221  } else {
222  continue;
223  }
224 
225  if (!$isFilterListSimple && is_array($value) && isset($filters[$key]['children_filters'])) {
226  $isChildrenFilterListSimple = is_numeric(implode('', array_keys($filters[$key]['children_filters'])));
227  $value = $this->_filter($value, $filters[$key]['children_filters'], $isChildrenFilterListSimple);
228  } else {
229  foreach ($itemFilters as $filterData) {
230  if ($zendFilter = $this->_getZendFilter($filterData)) {
231  $value = $zendFilter->filter($value);
232  } elseif ($filtrationHelper = $this->_getFiltrationHelper($filterData)) {
233  $value = $this->_applyFiltrationWithHelper($value, $filtrationHelper, $filterData);
234  }
235  }
236  }
237  $data[$key] = $value;
238  }
239  return $data;
240  }
241 
251  protected function _applyFiltrationWithHelper(
252  $value,
253  \Magento\Framework\App\Helper\AbstractHelper $helper,
254  array $filterData
255  ) {
256  if (!isset($filterData['method']) || empty($filterData['method'])) {
257  throw new \Exception("Helper filtration method is not set");
258  }
259  if (!isset($filterData['args']) || empty($filterData['args'])) {
260  $filterData['args'] = [];
261  }
262  $filterData['args'] = [-100 => $value] + $filterData['args'];
263  // apply filter
264  $value = call_user_func_array([$helper, $filterData['method']], $filterData['args']);
265  return $value;
266  }
267 
275  protected function _getFiltrationHelper($filterData)
276  {
277  $helper = false;
278  if (isset($filterData['helper'])) {
279  $helper = $filterData['helper'];
280  if (is_string($helper)) {
281  $helper = $this->_objectManager->get($helper);
282  } elseif (!$helper instanceof \Magento\Framework\App\Helper\AbstractHelper) {
283  throw new \Exception("Filter '{$helper}' not found");
284  }
285  }
286  return $helper;
287  }
288 
295  protected function _getZendFilter($filterData)
296  {
297  $zendFilter = false;
298  if (is_object($filterData) && $filterData instanceof \Zend_Filter_Interface) {
300  $zendFilter = $filterData;
301  } elseif (isset($filterData['model'])) {
302  $zendFilter = $this->_createCustomZendFilter($filterData);
303  } elseif (isset($filterData['zend'])) {
304  $zendFilter = $this->_createNativeZendFilter($filterData);
305  }
306  return $zendFilter;
307  }
308 
316  protected function _createCustomZendFilter($filterData)
317  {
318  $filter = $filterData['model'];
319  if (!isset($filterData['args'])) {
320  $filterData['args'] = null;
321  } else {
322  //use only first element because object manager cannot get more
323  $filterData['args'] = $filterData['args'][0];
324  }
325  if (is_string($filter)) {
326  $filter = $this->_objectManager->create($filter, $filterData['args']);
327  }
328  if (!$filter instanceof \Zend_Filter_Interface) {
329  throw new \Exception('Filter is not instance of \Zend_Filter_Interface');
330  }
331  return $filter;
332  }
333 
341  protected function _createNativeZendFilter($filterData)
342  {
343  $filter = $filterData['zend'];
344  if (is_string($filter)) {
345  $filterClassName = 'Zend_Filter_' . ucfirst($filter);
346  if (!is_a($filterClassName, \Zend_Filter_Interface::class, true)) {
347  throw new \Exception('Filter is not instance of \Zend_Filter_Interface');
348  }
349  $filterClassOptions = isset($filterData['args']) ? $filterData['args'] : [];
350  $filter = new $filterClassName(...array_values($filterClassOptions));
351  }
352 
353  return $filter;
354  }
355 }
appendFilter(\Zend_Filter_Interface $filter)
Definition: Input.php:128
const CHAIN_PREPEND
Definition: Filter.php:37
addFilters(array $filters)
Definition: Input.php:157
$helper
Definition: iframe.phtml:13
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
$objectManager
Definition: bootstrap.php:17
$value
Definition: gender.phtml:16
_getFiltrationHelper($filterData)
Definition: Input.php:275
_filter(array $data, &$filters=null, $isFilterListSimple=false)
Definition: Input.php:211
_applyFiltrationWithHelper( $value, \Magento\Framework\App\Helper\AbstractHelper $helper, array $filterData)
Definition: Input.php:251
const CHAIN_APPEND
Definition: Filter.php:36
__construct(\Magento\Framework\ObjectManagerInterface $objectManager)
Definition: Input.php:92
_createCustomZendFilter($filterData)
Definition: Input.php:316
$filters
Definition: uploader.phtml:11
_createNativeZendFilter($filterData)
Definition: Input.php:341
setFilters(array $filters)
Definition: Input.php:169
addFilter($name, $filter, $placement=\Zend_Filter::CHAIN_APPEND)
Definition: Input.php:112
if(!isset($_GET['name'])) $name
Definition: log.php:14