Magento 2.2.5: Фабрики классов не существует

Я после этого курса https://www.mage-world.com/blog/grid-and-form-in-magento-2-admin-panel-part-1.html, но моя версия Magento — 2.2. 5, так что это немного по-другому. Я создаю NewsFactory автоматически по блоку вместо контроллера, и он выдает это сообщение об ошибке

введите здесь описание изображения

Я просматривал google и stackexchange в течение 5 часов, но до сих пор не знаю, почему появляется эта ошибка. Итак, вот мой код:

Мой блок: C:\xampp\htdocs\magento\app\code\Fudu\HelloWorld\Block\Adminhtml\News.php

<?php

namespace Fudu\HelloWorld\Block\Adminhtml;

use \Magento\Framework\View\Element\Template;
use \Magento\Framework\View\Element\Template\Context;
use \Fudu\HelloWorld\Model\ResourceModel\Students\Collection as StudentsCollection;
use \Fudu\HelloWorld\Model\Students;
use \Fudu\HelloWorld\Model\NewsFactory;

class News extends Template
{
    /**
     * Constructor
     *
     */

    /**
     * News model factory
     * @var null|NewsFactory
     */
    protected $_newsFactory = null;

    /**
     * @param Context $context
     * @param NewsFactory $newsFactory
     * @param array $data
     */
    public function __construct(
        Context $context,
        NewsFactory $newsFactory,
        array $data = []
    )
    {
        $this->_newsFactory = $newsFactory;
        parent::__construct($context, $data);
        $this->_controller = 'adminhtml_news';
        $this->_blockGroup = 'Tutorial_SimpleNews';
        $this->_headerText = __('Manage News');
        $this->_addButtonLabel = __('Add News');
    }

    /**
     * @return Students[]
     */

    /** @var StudentsCollection $studentsCollection */
    public function execute()
    {
        $studentsCollection = $this->_newsFactory->create();
        $studentsCollection->addFieldToSelect('*')->load();
        return $studentsCollection->getItems();
    }

    /**
     * For a given students, returns its url
     * @param Students $students
     * @return string
     */
}

Мой контроллер: C:\xampp\htdocs\magento\app\code\Fudu\HelloWorld\Controller\Adminhtml\News.php

<?php

namespace Fudu\HelloWorld\Controller\Adminhtml;

use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Registry;
use Magento\Framework\View\Result\PageFactory;

class News extends Action
{
    /**
     * Core registry
     *
     * @var \Magento\Framework\Registry
     */
    protected $_coreRegistry;

    /**
     * Result page factory
     *
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $_resultPageFactory;

    /**
     * @param Context $context
     * @param Registry $coreRegistry
     * @param PageFactory $resultPageFactory
     */
    public function __construct(
        Context $context,
        Registry $coreRegistry,
        PageFactory $resultPageFactory
    )
    {
        parent::__construct($context);
        $this->_coreRegistry = $coreRegistry;
        $this->_resultPageFactory = $resultPageFactory;
    }

    /**
     * News access rights checking
     *
     * @return bool
     */


    public function execute()
    {
        $resultPage = $this->_resultPageFactory->create();
        return $resultPage;
    }
}

menu.xml (это меню из бэкэнда, когда мы нажимаем на 3-й вариант, который называется «Управление новостями», он будет перенаправлен на URL-адрес simplenews/news/index). C:\xampp\htdocs\magento\app\code\Fudu\HelloWorld\etc\adminhtml\menu.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="../../../Backend/etc/menu.xsd">
    <menu>
        <add id="Fudu_HelloWorld::main_menu" title="Simple News"
             module="Fudu_HelloWorld" sortOrder="20"
             resource="Fudu_HelloWorld::simplenews" />

        <add id="Fudu_HelloWorld::add_news" title="Add News"
             module="Fudu_HelloWorld" sortOrder="1"
             parent="Fudu_HelloWorld::main_menu"
             action="simplenews/news/new"
             resource="Fudu_HelloWorld::manage_news" />

        <add id="Fudu_HelloWorld::manage_news" title="Manage News"
             module="Fudu_HelloWorld" sortOrder="2"
             parent="Fudu_HelloWorld::main_menu"
             action="simplenews/news/index"
             resource="Fudu_HelloWorld::manage_news" />

        <add id="Fudu_HelloWorld::configuration" title="Configurations"
             module="Fudu_HelloWorld" sortOrder="3"
             parent="Fudu_HelloWorld::main_menu"
             action="adminhtml/system_config/edit/section/simplenews"
             resource="Fudu_HelloWorld::configuration" />
    </menu>
</config>

мое мнение: C:\xampp\htdocs\magento\app\code\Fudu\HelloWorld\view\adminhtml\layout\simplenews_news_index.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/
Framework/View/Layout/etc/page_configuration.xsd">
    <update handle="formkey"/>
    <update handle="simplenews_news_grid_block"/>
    <body>
        <referenceContainer name="content">
            <block class="Fudu\HelloWorld\Block\Adminhtml\News"
                   name="tutorial_simplenews_news.grid.container" />
        </referenceContainer>
    </body>
</page>

Спасибо, что прочитали это, и хорошего дня.


person fudu    schedule 17.07.2018    source источник
comment
Ах, я нашел ответ, потому что мне нужно создать модель после имени Factory ex: если вы хотите создать NewsFactory, вам нужно будет создать модель новостей.   -  person fudu    schedule 17.07.2018
comment
опубликуйте это как ответ и примите его!   -  person Adeel    schedule 17.07.2018


Ответы (1)


Запустите этот bin/magento setup:di:compile и, скорее всего, он выдаст ошибку, показывающую, почему этот Factory не может быть создан.

person Sergey    schedule 27.07.2018
comment
Спасибо за совет. Я получил ответ в своем другом сообщении magento.stackexchange: D - person fudu; 28.07.2018
comment
@fudu не могли бы вы дать ссылку на ответ? - person Klaas van der Weij; 29.03.2019
comment
@KlaasvanderWeij вам нужно только удалить сгенерированную папку, тогда все будет хорошо. - person fudu; 29.03.2019