Magento2 中创建页面

在Magento 2中创建页面

Magento 2提供了一组框架功能,可轻松创建不同的入口点。我们将在本课程中学习的切入点之一是页面。

Magento 2中的页面是Action Controller执行的结果。每个控制器要么返回HTML内容,要么重定向到另一个控制器进行进一步处理。在本课程中,我们将创建一个页面,当通过定制路由访问该页面时,该页面将在浏览器中显示JSON消息。

Lesson Overview

在本课程中,我们将学习以下内容:

  • 如何在Magento 2中创建页面?
  • 如何创建动作控制器?
  • 如何注册新路线?
  • 如何从控制器返回JSON数据?

Before we begin

在本教程中,我MageMastery_FirstPage使用registration.phpmodule.xml文件创建了模块。并且该模块已通过bin/magento setup:upgradeCLI命令成功注册。

registration.php文件中:

<?php

use Magento\Framework\Component\ComponentRegistrar;

ComponentRegistrar::register(
    ComponentRegistrar::MODULE,
    'MageMastery_FirstPage',
    __DIR__
);

module.xml文件中:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="MageMastery_FirstPage" />
</config>

有关模块创建和注册的更多信息,请参阅上一课《 Magento 2中的模块》

Registering a new route

为了在Magento 2中创建一个可通过浏览器访问的新页面,必须在Magento 2模块中创建两个文件。第一个文件是routes.xml。该文件负责向Magento 2提供信息,以在Magento 2中查找特定控制器模块的名称以及与URI匹配的其他规则。

第二个文件是控制器类,应执行并处理传入的请求。

让我们继续routes.xml在该MageMastery/FirstPage/etc/目录下创建一个新文件。

Configuration in Magento 2

可以为两个不同的区域提供配置:前端后端区域。还有一个默认值用于为两个区域提供配置。

对于店面配置更改,我们必须在frontend目录内添加一个新MageMastery/FirstPage/etc/目录。

对于 storefront configuration (店面配置)的改变,我们必须在MageMastery/FirstPage/etc/目录中增加一个新的frontend目录。我们将在接下来的课程中更多地讨论adminhtml目录。

如果您还没有创建etc/frontenddirectory,那么现在是时候创建它了。

如果您尚未创建etc/frontend目录,那么现在是执行此操作的正确时间。

The routes.xml file

etc/frontend目录内,我们创建routes.xml配置文件。来自所有Magento 2注册模块的所有路由配置文件(包括该MageMastery/FirstPage模块)将被合并并提供执行。

routes.xml初始文件状态:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">

</config>

Magento 2 Open Source提供了所谓的路由器,每个路由器都有自己的标识符。我们暂时不会深入研究路由器的实现。我们将使用被标识为“标准”的标准路由器。这是您在下面的代码中看到的:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
    
    </router>
</config>

在标准路由器节点内,我们可以添加路由配置。每个路由负责提供一个用于将路由与请求URL匹配的前名。此外,路由应提供一个模块名称,其中包括一个动作控制器类。

MageMastery_FirstPage模块的路由配置和magemastery前名如下所示:

<route id="magemastery_firstpage" frontName="magemastery">
    <module name="MageMastery_FirstPage" />
</route>

注意路由的id参数。它在Magento 2应用程序中必须是唯一的。建议的路由ID命名约定为小写模块名称,例如,magemastery_firstpage以确保唯一性。

让我们看看routes.xml文件的最终状态:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="magemastery_firstpage" frontName="magemastery">
            <module name="MageMastery_FirstPage" />
        </route>
    </router>
</config>

Magento 2标准路由器读取以magemastery请求URI部分开头的路由配置,找到名称为的模块名称MageMastery_FirstPage,然后检查控制器是否可以处理请求。

模块中的控制器是本课程要创建的第二个位或文件。

Action Controller

模块中的所有控制器都应该位于一个名为Controller的目录中。在找到类之前,Controller目录中应该还有另一个目录级别。在本课中,我们将在控制器中创建一个Page目录。

在Page目录中,让我们创建View.php文件。

因此,您应该具有以下模块结构。

View.php文件是一个MageMastery\FirstPage\控制器\Page\View 类,View class 应该继承Magento\Framework\App\Action\Action 类。

<?php

declare(strict_types=1);

namespace MageMastery\FirstPage\Controller\Page;

use Magento\Framework\App\Action\Action;

class View extends Action
{
    public function execute()
    {

    }
}

Action类需要提供execute()方法的实现。一旦Magento 2解析了路由,它将触发View::execute()方法。为了在前端呈现一些内容,应该添加execute()方法的逻辑。对于本课,我们将返回一个带有消息的JSON响应。

为了从execute()方法返回任何内容,Action父类提供了一个resultFactory 变量。Magento\Framework\Controller\ResultFactory 类的create()方法创建了一个Magento\Framework\Controller\Result\Json类的实例。然后,可以使用Json将类数组转换为JSON,并从execute()方法返回。

我们可以使用$ jsonResult设置一个数组,其中的键消息和值是我的第一个页面

$jsonResult->setData([
    'message' => 'My First Page'
]);

View控制器类的结果代码如下:

<?php

declare(strict_types=1);

namespace MageMastery\FirstPage\Controller\Page;

use Magento\Framework\Controller\Result\Json;
use Magento\Framework\App\Action\Action;
use Magento\Framework\Controller\ResultFactory;

class View extends Action
{
    public function execute()
    {
        /** @var Json $jsonResult */
        $jsonResult = $this->resultFactory->create(ResultFactory::TYPE_JSON);
        $jsonResult->setData([
            'message' => 'My First Page'
        ]);
        return $jsonResult;
    }
}

为了在浏览器中显示结果,必须清理Magento 2配置缓存。可以使用Magento CLI命令完成缓存清理cache:clean。该命令必须从Magento 2项目的根目录执行。

php bin/magento cache:clean

导航至http://magento2ce.magemastery.net/magemastery/page/viewurl,其中magento2ce.magemastery.net域名可以不同,具体取决于您在Magento 2安装过程中提供的域名。

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用*标注