PHP 更改直到 Composer 更新才会显示
PHP changes not showing up until Composer Update
我正在开发一个 cronjob,它将在上次更新日期之前删除产品。
我看到非常奇怪的 Magento 2 行为 - PHP 文件更改不会显示,直到我更新存储库然后 运行 composer update.
商店处于发展模式。 运行 通过 Docker-撰写。
在 其他插件 的开发过程中,我会尽快:
rm -rf var/generation var/view_preprocessed/ pub/static/frontend generated/code
php -dmemory_limit=6G bin/magento setup:di:compile
php -dmemory_limit=6G bin/magento setup:static-content:deploy -f
php -dmemory_limit=6G bin/magento cache:flush
文件更改显示,有时甚至没有这些命令。
但是,使用这个插件,直到我将更改完全推送到存储库,然后 运行 composer update 与所有其他命令,更改才会显示。
是否有某种我不知道的用于 cron 作业 类 的缓存?
文件夹结构
这是我的文件夹结构:
src\vendor\company\deleteoldproducts\Cron\DeleteOldProducts.php
src\vendor\company\deleteoldproducts\etc\adminhtml\system.xml
src\vendor\company\deleteoldproducts\etc\config.xml
src\vendor\company\deleteoldproducts\etc\crontab.xml
src\vendor\company\deleteoldproducts\etc\module.xml
src\vendor\company\deleteoldproducts\composer.json
src\vendor\company\deleteoldproducts\registration.php
cron 作业正在使用 DeleteOldProducts.php,但使用的是旧版本。我尝试对其进行更改,重新 运行 上述命令,但 cronjob 仍然使用旧版本的文件。这不正常。
这是 php 文件:
<?php
namespace Company\DeleteOldProducts\Cron;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
class DeleteOldProducts
{
/**
* @var ProductRepositoryInterface
*/
protected $_productRepositoryInterface;
/**
* @var CollectionFactory
*/
protected $_productCollectionFactory;
public function __construct(
ProductRepositoryInterface $_productRepositoryInterface,
CollectionFactory $_productCollectionFactory
) {
$this->_productRepositoryInterface = $_productRepositoryInterface;
$this->_productCollectionFactory = $_productCollectionFactory;
}
public function execute()
{
$writer = new \Zend_Log_Writer_Stream(BP . '/var/log/DELETE-OLD-PRODUCTS.log');
$logger = new \Zend_Log();
$logger->addWriter($writer);
$logger->info('---DELETING IS HAPPENING---');
$collection = $this->_productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->setPageSize(10);
$logger->info("COLLECTION?11111111");
foreach($collection as $product)
{
$logger->info('PRODUCT ID' . $product->getId());
}
$logger->info("COLLECTION?222222222");
$logger->info('---DELETING IS HAPPENING---');
$logger->info(' ');
$logger->info(' ');
return $this;
}
}
为什么会这样?
我发现了这个问题 - 我正在开发的插件和 composer 中的插件之间存在命名冲突
一个是“deleteoldproducts”,composer 中的一个是“module-deleteoldproducts”。
在我将其推送到存储库后应该删除原始文件夹。
我正在开发一个 cronjob,它将在上次更新日期之前删除产品。
我看到非常奇怪的 Magento 2 行为 - PHP 文件更改不会显示,直到我更新存储库然后 运行 composer update.
商店处于发展模式。 运行 通过 Docker-撰写。
在 其他插件 的开发过程中,我会尽快:
rm -rf var/generation var/view_preprocessed/ pub/static/frontend generated/code
php -dmemory_limit=6G bin/magento setup:di:compile
php -dmemory_limit=6G bin/magento setup:static-content:deploy -f
php -dmemory_limit=6G bin/magento cache:flush
文件更改显示,有时甚至没有这些命令。
但是,使用这个插件,直到我将更改完全推送到存储库,然后 运行 composer update 与所有其他命令,更改才会显示。
是否有某种我不知道的用于 cron 作业 类 的缓存?
文件夹结构
这是我的文件夹结构:
src\vendor\company\deleteoldproducts\Cron\DeleteOldProducts.php
src\vendor\company\deleteoldproducts\etc\adminhtml\system.xml
src\vendor\company\deleteoldproducts\etc\config.xml
src\vendor\company\deleteoldproducts\etc\crontab.xml
src\vendor\company\deleteoldproducts\etc\module.xml
src\vendor\company\deleteoldproducts\composer.json
src\vendor\company\deleteoldproducts\registration.php
cron 作业正在使用 DeleteOldProducts.php,但使用的是旧版本。我尝试对其进行更改,重新 运行 上述命令,但 cronjob 仍然使用旧版本的文件。这不正常。
这是 php 文件:
<?php
namespace Company\DeleteOldProducts\Cron;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
class DeleteOldProducts
{
/**
* @var ProductRepositoryInterface
*/
protected $_productRepositoryInterface;
/**
* @var CollectionFactory
*/
protected $_productCollectionFactory;
public function __construct(
ProductRepositoryInterface $_productRepositoryInterface,
CollectionFactory $_productCollectionFactory
) {
$this->_productRepositoryInterface = $_productRepositoryInterface;
$this->_productCollectionFactory = $_productCollectionFactory;
}
public function execute()
{
$writer = new \Zend_Log_Writer_Stream(BP . '/var/log/DELETE-OLD-PRODUCTS.log');
$logger = new \Zend_Log();
$logger->addWriter($writer);
$logger->info('---DELETING IS HAPPENING---');
$collection = $this->_productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->setPageSize(10);
$logger->info("COLLECTION?11111111");
foreach($collection as $product)
{
$logger->info('PRODUCT ID' . $product->getId());
}
$logger->info("COLLECTION?222222222");
$logger->info('---DELETING IS HAPPENING---');
$logger->info(' ');
$logger->info(' ');
return $this;
}
}
为什么会这样?
我发现了这个问题 - 我正在开发的插件和 composer 中的插件之间存在命名冲突
一个是“deleteoldproducts”,composer 中的一个是“module-deleteoldproducts”。
在我将其推送到存储库后应该删除原始文件夹。