คุณสามารถทำได้โดยใช้สองไฟล์:
สร้างโฟลเดอร์และคลาสในรูทของโปรเจคเช่น:
crons / CronprocessApp.php
<?php
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
use phpseclib\Net\SFTP;
use phpseclib\Crypt\RSA;
class CronprocessApp
extends \Magento\Framework\App\Http
implements \Magento\Framework\AppInterface{
public function __construct(
\Magento\Framework\App\State $state,\Magento\Framework\App\Response\Http $response)
{
$this->_response = $response;
//$state->setAreaCode('any area'); // or 'adminhtml', depending on your needs
$state->setAreaCode('adminhtml'); // or 'adminhtml', depending on your needs
}
public function launch()
{
/** @var \Vendor\Module\Cron\Test $cron */
$cron = \Magento\Framework\App\ObjectManager::getInstance()
->create('Custom\Preorder\Cron\ChangeVisiblityNonPreorderProduct'); //pass the name of your cron class path
$cron->execute();
return $this->_response;
}
public function catchException(\Magento\Framework\App\Bootstrap $bootstrap, \Exception $exception)
{
return false;
}
}
?>
สร้างไฟล์คลาสอื่น:
crons / Cronprocess.php
<?php
require __DIR__ . '/../app/bootstrap.php';
require __DIR__ . '/../crons/cronprocessApp.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('CronprocessApp');
$bootstrap->run($app);
หากต้องการเรียกใช้ cron ไปที่ cli พร้อมกับรูทโปรเจ็กต์และรันคำสั่งด้านล่าง:
php crons/cronprocess.php
require '../app/bootstrap.php';
ยังบน TestApp.php ต้องมี:return $this->_response;
หรือมันจะโยนข้อผิดพลาดที่คุณมีในภาพหน้าจอ phpstorm ของคุณ แต่ไม่ใช่รหัสจริง ฉันจะลองและแก้ไขคำตอบของคุณด้วยสิ่งนี้