0

我在学习这门课程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(这是一个来自后端的菜单,当我们点击第三个选项,即“管理新闻”时,它会重定向到 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>

感谢您阅读本文,祝您有美好的一天。

4

1 回答 1

0

运行它bin/magento setup:di:compile,很可能它会给出一个错误,说明为什么Factory不能创建它。

于 2018-07-27T23:38:52.423 回答