Ошибка типа произошла при создании объекта при попытке использовать пользовательскую модель из пользовательского модуля


Да, я знаю, еще одна "Ошибка типа произошла при создании объекта"... Кроме того, я, вероятно, собираюсь сделать это таким образом, чтобы опытному разработчику 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);
    }
}
Author: joeybab3, 2020-06-17

1 answers

Как ни странно, это было вызвано сбоем во время установки:di: этап компиляции.

Поскольку у меня были ошибки, о которых не сообщалось в PHP, я понятия не имел, что он терпит неудачу, и я на самом деле никогда не видел, чтобы он успешно компилировался, поэтому я не знал, что он не должен был останавливаться после шага 3, я просто предположил, что другие шаги прошли слишком быстро, чтобы он мог сообщить.

Добавить отчеты об ошибках в bootstrap.php если у вас также возникают ошибки компиляции или компилятор останавливается после одного из шагов.

 0
Author: joeybab3, 2020-08-05 16:48:21