Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Public Member Functions | Data Fields | Protected Member Functions | Protected Attributes
DbStorage Class Reference
Inheritance diagram for DbStorage:
AbstractStorage StorageInterface UrlFinderInterface UrlPersistInterface DbStorage

Public Member Functions

 __construct (UrlRewriteFactory $urlRewriteFactory, DataObjectHelper $dataObjectHelper, ResourceConnection $resource, LoggerInterface $logger=null)
 
 deleteByData (array $data)
 
- Public Member Functions inherited from AbstractStorage
 __construct (UrlRewriteFactory $urlRewriteFactory, DataObjectHelper $dataObjectHelper)
 
 findAllByData (array $data)
 
 findOneByData (array $data)
 
 replace (array $urls)
 

Data Fields

const TABLE_NAME = 'url_rewrite'
 
const ERROR_CODE_DUPLICATE_ENTRY = 1062
 

Protected Member Functions

 prepareSelect (array $data)
 
 doFindAllByData (array $data)
 
 doFindOneByData (array $data)
 
 insertMultiple ($data)
 
 createFilterDataBasedOnUrls ($urls)
 
- Protected Member Functions inherited from AbstractStorage
 doFindAllByData (array $data)
 
 doFindOneByData (array $data)
 
 doReplace (array $urls)
 
 createUrlRewrite ($data)
 

Protected Attributes

 $connection
 
 $resource
 
- Protected Attributes inherited from AbstractStorage
 $urlRewriteFactory
 
 $dataObjectHelper
 

Detailed Description

Url rewrites DB storage.

@SuppressWarnings(PHPMD.CouplingBetweenObjects)

Definition at line 24 of file DbStorage.php.

Constructor & Destructor Documentation

◆ __construct()

__construct ( UrlRewriteFactory  $urlRewriteFactory,
DataObjectHelper  $dataObjectHelper,
ResourceConnection  $resource,
LoggerInterface  $logger = null 
)
Parameters
UrlRewriteFactory$urlRewriteFactory
DataObjectHelper$dataObjectHelper
ResourceConnection$resource
LoggerInterface | null$logger

Definition at line 57 of file DbStorage.php.

62  {
63  $this->connection = $resource->getConnection();
64  $this->resource = $resource;
65  $this->logger = $logger ?: ObjectManager::getInstance()
66  ->get(LoggerInterface::class);
67 
68  parent::__construct($urlRewriteFactory, $dataObjectHelper);
69  }
$logger

Member Function Documentation

◆ createFilterDataBasedOnUrls()

createFilterDataBasedOnUrls (   $urls)
protected

Get filter for url rows deletion due to provided urls

Parameters
UrlRewrite[]$urls
Returns
array
Deprecated:
101.0.3 Not used anymore.

Definition at line 275 of file DbStorage.php.

276  {
277  $data = [];
278  foreach ($urls as $url) {
279  $entityType = $url->getEntityType();
280  foreach ([UrlRewrite::ENTITY_ID, UrlRewrite::STORE_ID] as $key) {
281  $fieldValue = $url->getByKey($key);
282  if (!isset($data[$entityType][$key]) || !in_array($fieldValue, $data[$entityType][$key])) {
283  $data[$entityType][$key][] = $fieldValue;
284  }
285  }
286  }
287 
288  return $data;
289  }

◆ deleteByData()

deleteByData ( array  $data)

{Remove rewrites that contains some rewrites data

Parameters
array$data
Returns
void @api
}

Implements UrlPersistInterface.

Definition at line 294 of file DbStorage.php.

295  {
296  $this->connection->query(
297  $this->prepareSelect($data)->deleteFromSelect($this->resource->getTableName(self::TABLE_NAME))
298  );
299  }

◆ doFindAllByData()

doFindAllByData ( array  $data)
protected

{}

Definition at line 92 of file DbStorage.php.

93  {
94  return $this->connection->fetchAll($this->prepareSelect($data));
95  }

◆ doFindOneByData()

doFindOneByData ( array  $data)
protected

{}

Definition at line 100 of file DbStorage.php.

101  {
102  if (array_key_exists(UrlRewrite::REQUEST_PATH, $data)
103  && is_string($data[UrlRewrite::REQUEST_PATH])
104  ) {
105  $result = null;
106 
107  $requestPath = $data[UrlRewrite::REQUEST_PATH];
108 
110  rtrim($requestPath, '/'),
111  rtrim($requestPath, '/') . '/',
112  ];
113 
114  $resultsFromDb = $this->connection->fetchAll($this->prepareSelect($data));
115 
116  if (count($resultsFromDb) === 1) {
117  $resultFromDb = current($resultsFromDb);
119 
120  // If request path matches the DB value or it's redirect - we can return result from DB
121  $canReturnResultFromDb = ($resultFromDb[UrlRewrite::REQUEST_PATH] === $requestPath
122  || in_array((int)$resultFromDb[UrlRewrite::REDIRECT_TYPE], $redirectTypes, true));
123 
124  // Otherwise return 301 redirect to request path from DB results
125  $result = $canReturnResultFromDb ? $resultFromDb : [
126  UrlRewrite::ENTITY_TYPE => 'custom',
127  UrlRewrite::ENTITY_ID => '0',
128  UrlRewrite::REQUEST_PATH => $requestPath,
131  UrlRewrite::STORE_ID => $resultFromDb[UrlRewrite::STORE_ID],
132  UrlRewrite::DESCRIPTION => null,
134  UrlRewrite::METADATA => null,
135  ];
136  } else {
137  // If we have 2 results - return the row that matches request path
138  foreach ($resultsFromDb as $resultFromDb) {
139  if ($resultFromDb[UrlRewrite::REQUEST_PATH] === $requestPath) {
140  $result = $resultFromDb;
141  break;
142  }
143  }
144  }
145 
146  return $result;
147  }
148 
149  return $this->connection->fetchRow($this->prepareSelect($data));
150  }

◆ insertMultiple()

insertMultiple (   $data)
protected

Insert multiple

Parameters
array$data
Returns
void
Exceptions

Definition at line 251 of file DbStorage.php.

252  {
253  try {
254  $this->connection->insertMultiple($this->resource->getTableName(self::TABLE_NAME), $data);
255  } catch (\Exception $e) {
256  if (($e->getCode() === self::ERROR_CODE_DUPLICATE_ENTRY)
257  && preg_match('#SQLSTATE\[23000\]: [^:]+: 1062[^\d]#', $e->getMessage())
258  ) {
259  throw new \Magento\Framework\Exception\AlreadyExistsException(
260  __('URL key for specified store already exists.'),
261  $e
262  );
263  }
264  throw $e;
265  }
266  }
__()
Definition: __.php:13

◆ prepareSelect()

prepareSelect ( array  $data)
protected

Prepare select statement for specific filter

Parameters
array$data
Returns
Select

Definition at line 77 of file DbStorage.php.

78  {
79  $select = $this->connection->select();
80  $select->from($this->resource->getTableName(self::TABLE_NAME));
81 
82  foreach ($data as $column => $value) {
83  $select->where($this->connection->quoteIdentifier($column) . ' IN (?)', $value);
84  }
85 
86  return $select;
87  }
$value
Definition: gender.phtml:16

Field Documentation

◆ $connection

$connection
protected

Definition at line 39 of file DbStorage.php.

◆ $resource

$resource
protected

Definition at line 44 of file DbStorage.php.

◆ ERROR_CODE_DUPLICATE_ENTRY

const ERROR_CODE_DUPLICATE_ENTRY = 1062

Code of "Integrity constraint violation: 1062 Duplicate entry" error

Definition at line 34 of file DbStorage.php.

◆ TABLE_NAME

const TABLE_NAME = 'url_rewrite'

DB Storage table name

Definition at line 29 of file DbStorage.php.


The documentation for this class was generated from the following file: