Magento2实现CRUD操作功能

        之前学习了如果创建一个简单的模块,包括创建目录结构,定义模块,创建registration.php 文件和 module.xml 文件,接下来要学习一下如何去实现在模块中去实现CRUD功能。

1.创建模块的基本结构

在之前Vendor_HelloWorld模块目录中添加新文件实现CRUD功能

app/
└── code/
    └── Vendor/
        └── HelloWorld/
            ├── Block/
            │   └── Adminhtml/
            │       └── Item/
            │           ├── Edit/
            │           │   └── Form.php
            │           └── Edit.php 
            ├── Controller/
            │   ├── Adminhtml/
            │   │   └── Item/
            │   │       ├── Index.php
            │   │       ├── Edit.php
            │   │       ├── Save.php
            │   │       ├── NewAction.php
            │   │       ├── MassDelete.php
            │   │       └── Delete.php
            │   └── Index/
            │       └── Index.php
            │
            ├── etc/
            │   ├── adminhtml/
            │   │   ├── menu.xml
            │   │   └── routes.xml
            │   ├── frontend/
            │   │   └── routes.xml
            │   ├── module.xml
            │   ├── acl.xml
            │   └── di.xml
            │
            ├── Model/
            │   ├── ResourceModel/
            │   │   ├── Item/
            │   │   │   └── Collection.php
            │   │   └── Item.php
            │   └── Item.php
            │
            ├── Setup/
            │   └── InstallSchema.php
            │ 
            ├── Ui/
            │   └── Component/
            │       └── Listing/
            │           └── Column/
            │               └── Actions.php
            │
            └── view/
                ├── adminhtml/
                │   ├── layout/
                │   │   ├── helloworld_item_index.xml
                │   │   └── helloworld_item_edit.xml
                │   └── ui_component/
                │       └── helloworld_item_listing.xml
                └── frontend/
                    ├── layout/
                    │   └── helloworld_index_index.xml
                    └── templates/
                        └── hello.phtml   

这个目录结构是在之前Vendor_HelloWorld模块中新增了一些文件以及目录,包括,CRUD操作的控制器、Model类、安装数据库的类方法,以及UI组件的目录,接下来安装这个目录来一步一步创建该模块来实现CRUD操作

2.创建InstallSchema文件

在实现CRUD操作之前,需要先通过InstallSchema文件来创建数据表,Magento的创建数据表的操作是通过创建InstallSchema文件来实现的,在该方法中去添加表的名称以及表中的字段名称、字段类型.

app/code/Vendor/HelloWorld/Setup/InstallSchema.php

<?php

namespace Vendor\HelloWorld\Setup;

use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\DB\Ddl\Table;

class InstallSchema implements InstallSchemaInterface
{
    public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        if (!$setup->tableExists('helloworld_items')) {
            $table = $setup->getConnection()->newTable(
                $setup->getTable('helloworld_items')
            )
                ->addColumn(
                    'item_id',
                    Table::TYPE_INTEGER,
                    null,
                    ['identity' => true, 'nullable' => false, 'primary' => true, 'unsigned' => true],
                    'Item ID'
                )
                ->addColumn(
                    'name',
                    Table::TYPE_TEXT,
                    255,
                    ['nullable' => false],
                    'Item Name'
                )
                ->addColumn(
                    'description',
                    Table::TYPE_TEXT,
                    '64k',
                    [],
                    'Item Description'
                )
                ->addColumn(
                    'is_active',
                    Table::TYPE_SMALLINT,
                    null,
                    ['nullable' => false, 'default' => '1'],
                    'Is Active'
                )
                ->addColumn(
                    'created_at',
                    Table::TYPE_TIMESTAMP,
                    null,
                    ['nullable' => false, 'default' => Table::TIMESTAMP_INIT],
                    'Created At'
                )
                ->addColumn(
                    'updated_at',
                    Table::TYPE_TIMESTAMP,
                    null,
                    ['nullable' => false, 'default' => Table::TIMESTAMP_INIT_UPDATE],
                    'Updated At'
                )
                ->setComment('Helloworld Items Table');

            $setup->getConnection()->createTable($table);
        }

        $setup->endSetup();
    }
}

3.创建Model类方法

        在创建完Model目录之后,首先需要创建三个类:模型类Item.php、资源模型类ResourceModel/Item.php、集合类ResourceModel/Item/Collection.php,这三个类方法是用于数据库之间进行交互。

首先创建模型类Item.php:

app/code/Vendor/HelloWorld/Model/Item.php

<?php

namespace Vendor\HelloWorld\Model;

use Magento\Framework\Model\AbstractModel;
use Vendor\HelloWorld\Api\Data\ItemInterface;

class Item extends AbstractModel implements ItemInterface
{
    protected function _construct()
    {
        $this->_init('Vendor\HelloWorld\Model\ResourceModel\Item');
    }
}

在上面的代码中,Item模型类继承自AbstractModel类,并通过_init()方法将其与对应的资源模型类关联起来。

创建资源模型类ResourceModel/Item.php:

app/code/Vendor/HelloWorld/Model/ResourceModel/Item.php

<?php

namespace Vendor\HelloWorld\Model\ResourceModel;

use Magento\Framework\Model\ResourceModel\Db\AbstractDb;

class Item extends AbstractDb
{
    protected function _construct()
    {
        $this->_init('helloworld_items', 'item_id');
    }
}

在这里,Item资源模型类继承自AbstractDb,并使用_init()方法指定数据库表helloworld_items及其主键item_id。

创建集合类ResourceModel/Item/Collection.php:

app/code/Vendor/HelloWorld/Model/ResourceModel/Item/Collection.php

<?php

namespace Vendor\HelloWorld\Model\ResourceModel\Item;

use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;

class Collection extends AbstractCollection
{
    protected $_idFieldName = 'item_id';
    protected function _construct()
    {
        $this->_init('Vendor\HelloWorld\Model\Item', 'Vendor\HelloWorld\Model\ResourceModel\Item');
    }
}

总结

  • 模型类 (Model):用于表示数据库表中的一条记录,封装数据操作的逻辑,负责对单行数据进行增删改查。

  • 资源模型类 (ResourceModel):负责与数据库交互,定义数据库的具体操作。它直接与数据库表关联,实现CRUD操作。

  • 集合类 (Collection):用于加载多条数据记录,通常用于展示列表。它可以实现分页、过滤和排序功能,方便在管理后台中展示数据。

通过将这三类类文件分离,Magento 2实现了数据访问逻辑和业务逻辑的解耦

4.创建控制器

创建完类方法之后,接下来需要创建用于处理CRUD操作的控制器,如Index.php、NewAction.php、Edit.php、Save.php、Delete.php

创建Index.php

创建Index作为首页的控制器

app/code/Vendor/HelloWorld/Controller/Adminhtml/Item/Index.php

<?php

namespace Vendor\HelloWorld\Controller\Adminhtml\Item;

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

class Index extends Action
{
    protected $resultPageFactory;

    public function __construct(
        Action\Context $context,
        PageFactory $resultPageFactory
    ) {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute()
    {
        $resultPage = $this->resultPageFactory->create();
        $resultPage->setActiveMenu('Vendor_HelloWorld::item');
        $resultPage->getConfig()->getTitle()->prepend(__('Items'));

        return $resultPage;
    }
}

创建NewAction.php

创建NewAction.php作为Edit控制器的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值