Magento2创建一个自定义模块

安装Magento之后,开始学习创建一个自定义模块来感受一下magento。

首先大概了解一下magento2的目录结构:

app/code/Vendor/Module目录 (Vendor 一般作为开发者的名称或者网站名称、公司名称等,Module为你自定义模块的名称)

  • Block:存放与页面展示相关的 PHP 类。Block 类负责从模型获取数据并传递给模板文件(PHTML)
  • Controller:存放控制器类,负责处理 HTTP 请求。
  • etc:存放模块的配置文件
  • Helper:存放辅助类,封装了常用的功能和业务逻辑,便于在不同的类中重用
  • Model: 存放与业务逻辑相关的 PHP 类,这些类通常直接与数据库交互
  • Observer:存放观察者类,这些类会监听特定的事件并执行相应的操作
  • Plugin:存放插件类,用于拦截和修改现有类的方法行为
  • Setup:存放数据库安装和升级脚本(
  • UI:存放 UI 组件相关的类,用于定义和配置 Magento 2 的 UI 组件(如表格、表单等)
  • view:存放视图文件(如 PHTML 模板文件、布局 XML 文件)
  • registration.php:模块注册文件,告知 Magento 2 系统有此模块的存在

bin目录

  • 主要是存放magento2的执行工具,用于执行magento2的各种命令操作(安装,清缓存等)

dev目录

  • 用于开发和测试的文件和工具

generated目录

  • 存储运行时生成的类(如工厂类、拦截器类等),这些文件由 Magento 自动管理,开发者不应手动修改此目录下的文件
  • generated/code:存放由 Magento 生成的代码
  • generated/metadata:存放生成的元数据文件

lib目录

  • lib/internal:存放 Magento 框架内部使用的核心库(如Magento/Framework)
  • lib/web:存放前端库(如requirejs、jquery等)

pub目录

  • 可访问的公共文件目录

var目录

  • 存储 Magento 运行时生成的所有临时文件和缓存数据

vendor目录

  • 存放所有通过 Composer 安装的 PHP 依赖库,包括 Magento 自身的模块和第三方库

1.创建HelloWorld自定义模块

在phpstorm中打开magento的目录

在app目录下创建一个code目录,在code目录下再创建一个Vendor目录,来自定义一个HelloWorld模块创建HelloWorld目录

2.创建 registration.php 文件

registration.php 是用于注册模块,告诉magento该模块的存在,该文件直接放在 app/code/Vendor/HelloWorld 目录之下。

app/code/Vendor/HelloWorld/registration.php:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Vendor_HelloWorld',
    __DIR__
);

3.创建etc目录,并创建module.xml文件

创建registration.php文件之后,magento就知道了该模块的存在,那么接下来就得给这个模块定义基本信息,如模块名称跟版本,module.xml文件直接放在app/code/Vendor/HelloWorld/etc 目录之下。

app/code/Vendor/HelloWorld/etc/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="Vendor_HelloWorld" setup_version="1.0.0"/>
</config>

4.创建路由routes.xml文件

 module跟registration.php作为告知magento自定义文件的创建文件,创建完成之后,就应该给我们的模块配置路由来告诉服务器,我们访问自定义模块的时候要访问的url,网站分为前端跟后端,当我们创建端的模块时都要进行创建不同的routes.xml文件,他们所在的目录也不同,创建前端的自定义模块,需要在etc目录下创建frontend目录,后端则是adminhtml目录,因此我们要做的HelloWorld模块的路由应该放在 app/code/Vendor/HelloWorld/etc/frontend 目录下

app/code/Vendor/HelloWorld/etc/frontend/routes.xml:

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

5.创建Index控制器

当我们路由、模块配置文件配置完成之后就需要去创建控制器,作为magento项目,创建前台控制器时可以将Index.php文件放在 app/code/Vendor/HelloWorld/Controller/Index 目录下

app/code/Vendor/HelloWorld/Controller/Index/Index.php:

<?php

namespace Vendor\HelloWorld\Controller\Index;

use Magento\Framework\App\Action\Action; //For frontend controller
use Magento\Framework\App\Action\Context;
use Magento\Framework\Controller\ResultFactory;

class Index extends Action
{
    public function __construct(Context $context)
    {
        parent::__construct($context);
    }

    public function execute()
    {
        //create Hello World page.
        $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
        $resultPage->getConfig()->getTitle()->set(__('Hello World'));

        //return this result page.
        return $resultPage;
    }

}

6.创建视图目录以及文件

有了控制器之后,我们就需要给页面创建视图文件,创建view目录,该目录也分为前后端两个目录,adminhtml、frontend 在这两个目录下一般创建layout、templates这两个目录。在layout 中创建 布局文件helloworld_index_index.xml

该文件的命名规范是 (路由的frontName_控制器名称_方法名称.xml)

app/code/Vendor/HelloWorld/view/frontend/layout/helloworld_index_index.xml:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <block class="Magento\Framework\View\Element\Template" name="helloworld" template="Vendor_HelloWorld::hello.phtml"/>
        </referenceContainer>
    </body>
</page>
<referenceContainer name="content">
这个代表的是在页面的content容器中添加自定义页面

布局文件创建结束之后,根据布局文件在templates目录下创建hello.phtml文件,来添加自定义页面

app/code/Vendor/HelloWorld/view/frontend/templates/hello.phtml:

<h1>Welcome to Hello World</h1>
<p>This is My Hello World</p>

7.开启模块并测试

创建完所有文件之后,在magento目录下通过终端执行magento的启用模块命令

php bin/magento module:enable Vendor_HelloWorld
php bin/magento setup:upgrade
php bin/magento cache:clean
php bin/magento cache:flush

执行完毕之后,打开网站输入url

我的url:http://magento/helloworld/index/index,就可以看到如下的页面

下一篇学习在admin后端创建一个简单的菜单模块 Magento2.3.5创建一个Admin后端的菜单自定义模块-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值