123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Backend\Model\Widget\Grid\Row;
- /**
- * Grid row url generator
- * @api
- * @since 100.0.2
- */
- class UrlGenerator implements \Magento\Backend\Model\Widget\Grid\Row\GeneratorInterface
- {
- /**
- * @var \Magento\Backend\Model\UrlInterface
- */
- protected $_urlModel;
- /**
- * @var string
- */
- protected $_path;
- /**
- * @var array
- */
- protected $_params = [];
- /**
- * @var array
- */
- protected $_extraParamsTemplate = [];
- /**
- * @param \Magento\Backend\Model\UrlInterface $backendUrl
- * @param array $args
- * @throws \InvalidArgumentException
- */
- public function __construct(\Magento\Backend\Model\UrlInterface $backendUrl, array $args = [])
- {
- if (!isset($args['path'])) {
- throw new \InvalidArgumentException('Not all required parameters passed');
- }
- $this->_urlModel = isset($args['urlModel']) ? $args['urlModel'] : $backendUrl;
- $this->_path = (string)$args['path'];
- if (isset($args['params'])) {
- $this->_params = (array)$args['params'];
- }
- if (isset($args['extraParamsTemplate'])) {
- $this->_extraParamsTemplate = (array)$args['extraParamsTemplate'];
- }
- }
- /**
- * Create url for passed item using passed url model
- *
- * @param \Magento\Framework\DataObject $item
- * @return string
- */
- public function getUrl($item)
- {
- if (!empty($this->_path)) {
- $params = $this->_prepareParameters($item);
- return $this->_urlModel->getUrl($this->_path, $params);
- }
- return '';
- }
- /**
- * Convert template params array and merge with preselected params
- *
- * @param \Magento\Framework\DataObject $item
- * @return array
- */
- protected function _prepareParameters($item)
- {
- $params = [];
- foreach ($this->_extraParamsTemplate as $paramKey => $paramValueMethod) {
- $params[$paramKey] = $item->{$paramValueMethod}();
- }
- return array_merge($this->_params, $params);
- }
- }
|