📅  最后修改于: 2023-12-03 15:23:31.528000             🧑  作者: Mango
当您在Magento 2中发布新API后,您需要重新索引以确保数据的正确性和可访问性。以下是如何在PHP中重新索引Magento 2的步骤。
首先,您需要在PHP脚本中引入Magento 2的启动脚本。您可以使用以下代码:
require_once '/path/to/magento/app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
在获取索引程序类之前,您需要注入两个依赖项:Magento\Framework\Indexer\StateInterface
和Magento\Framework\Indexer\IndexerRegistry
。
您可以使用以下代码注入这些依赖项:
use Magento\Framework\Indexer\IndexerRegistry;
use Magento\Framework\Indexer\StateInterface;
class Indexer
{
/**
* @var \Magento\Framework\Indexer\IndexerInterface[]
*/
private $indexers;
/**
* @var \Magento\Framework\Indexer\StateInterface
*/
private $state;
/**
* Indexer constructor.
*
* @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
* @param \Magento\Framework\Indexer\StateInterface $state
*/
public function __construct(
IndexerRegistry $indexerRegistry,
StateInterface $state
) {
$this->indexers = $indexerRegistry->get();
$this->state = $state;
}
}
在重新索引之前,您需要暂停所有的索引程序。这可以确保您的数据是安全的,并减少索引程序运行期间的问题。您可以使用以下代码暂停所有索引程序:
$indexer = $objectManager->get('Magento\Framework\Indexer\IndexerRegistry');
$indexerList = $indexer->getIndexers();
foreach ($indexerList as $indexer) {
$indexer->getState()->setMode(\Magento\Framework\Indexer\StateInterface::MODE_MANUAL);
}
现在,您可以开始重新索引。您可以使用以下代码重新索引:
foreach ($this->indexers as $indexer) {
$indexerCode = $indexer->getId();
try {
$this->state->setStatus($indexerCode, StateInterface::STATUS_WORKING);
$indexer->reindexAll();
$this->state->setStatus($indexerCode, StateInterface::STATUS_VALID);
$this->state->save();
} catch (\Exception $e) {
$this->logger->error(__('Error occurred during %1 reindexing process. %2', $indexerCode, $e->getMessage()));
$this->state->setStatus($indexerCode, StateInterface::STATUS_INVALID);
$this->state->save();
}
}
最后,您需要重启所有索引程序。您可以使用以下代码恢复所有索引程序:
foreach ($indexerList as $indexer) {
$indexer->getState()->setMode(\Magento\Framework\Indexer\StateInterface::MODE_REAL_TIME);
}
现在,您已经成功地使用PHP重新索引Magento 2!请确保在重新索引之前备份您的数据以防万一。