Ошибка типа произошла при создании объекта при попытке использовать пользовательскую модель из пользовательского модуля
Да, я знаю, еще одна "Ошибка типа произошла при создании объекта"... Кроме того, я, вероятно, собираюсь сделать это таким образом, чтобы опытному разработчику M2 понадобилось время, прежде чем читать этот пост, поэтому, если я просто забуду об ошибке и переосмыслю то, что я делаю, лучше, дайте мне знать.
Полная ошибка выглядит следующим образом:
1 exception(s):
Exception #0 (Magento\Framework\Exception\RuntimeException): Type Error occurred when creating object: VendorName\CustomModel\Model\Item
Exception #0 (Magento\Framework\Exception\RuntimeException): Type Error occurred when creating object: VendorName\CustomModel\Model\Item
#1 Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() called at [vendor/magento/framework/ObjectManager/ObjectManager.php:56]
#2 Magento\Framework\ObjectManager\ObjectManager->create() called at [pub/misc/test.php:13]
#3 TestItems->launch() called at [generated/code/TestItems/Interceptor.php:24]
#4 TestItems\Interceptor->launch() called at [vendor/magento/framework/App/Bootstrap.php:261]
#5 Magento\Framework\App\Bootstrap->run() called at [pub/misc/test.php:20]
Я попробовал все обычные исправления:
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:clean
rm -rf /generated/*
Но ничего из того, что я мог найти в предыдущие разы, это не было вопрос решает мою проблему. Я пытаюсь создать сценарий администратора, который можно запустить, посетив файл PHP, такой как /misc/test.php , и я использую код по адресу Как я могу загрузить Magento 2 в test.php сценарий?, чтобы сделать это наилучшим образом, каким я могу.
Ниже приведены мои файлы:
/pub/misc/test.php
require __DIR__ . '/../../../../app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
class TestItems
extends \Magento\Framework\App\Http
implements \Magento\Framework\AppInterface {
public function launch()
{
//dirty code goes here.
//the example below just prints a class name
echo get_class($this->_objectManager->create('\VendorName\CustomModule\Model\Item'));
//the method must end with this line
return $this->_response;
}
}
$app = $bootstrap->createApplication('TestItems');
$bootstrap->run($app);
/app/code/VendorName/CustomModule/Item.php
namespace VendorName\CustomModule\Model;
class Item extends \Magento\Framework\Model\AbstractModel
{
protected $sourceItemsBySku;
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\InventoryApi\Api\GetSourceItemsBySkuInterface $sourceItemsBySku
)
{
$this->sourceItemsBySku = $sourceItemsBySku;
parent::__construct($context);
}
public function getSourceItemBySku($sku)
{
return $this->sourceItemsBySku->execute($sku);
}
}
1 answers
Как ни странно, это было вызвано сбоем во время установки:di: этап компиляции.
Поскольку у меня были ошибки, о которых не сообщалось в PHP, я понятия не имел, что он терпит неудачу, и я на самом деле никогда не видел, чтобы он успешно компилировался, поэтому я не знал, что он не должен был останавливаться после шага 3, я просто предположил, что другие шаги прошли слишком быстро, чтобы он мог сообщить.
Добавить отчеты об ошибках в bootstrap.php если у вас также возникают ошибки компиляции или компилятор останавливается после одного из шагов.