irishtitan / handshake
围绕 Magento 2 的 Laravel 风格包装器。
Requires
- php: >=7.0
- fzaninotto/faker: ^1.6
- illuminate/database: ^5.4
- sebastiaanluca/php-stub-generator: ^0.1.1
Requires (Dev)
- phpunit/phpunit: ^6.0
This package is not auto-updated.
Last update: 2024-09-29 01:53:17 UTC
README
我不再积极维护这个包。如果你需要使用它,请随意分支或贡献一个拉取请求。
Handshake 是一个 Magento 2 模块,旨在使 Magento 2 模块开发体验更简单、更优雅。它通过用 Laravel 的 Eloquent 库替换默认的 Magento 2 ORM 系统来实现这一点。任何使用 Handshake 构建的定制 Magento 2 模块都可以使用 Laravel 风格的迁移、种子、模型、会话等,以及相应的命令。
Handshake 已在 Magento 版本 2.1.5 - 2.1.8 上进行测试。
安装
在安装 Handshake 之前,请确保您有一个工作的 Magento 2 复制。还请确保 Magento 2 已正确配置,因为 Handshake 将尝试使用 Magento 2 的数据库配置来运行您的迁移、种子等。
您可以使用 composer 安装 Handshake
composer require irishtitan/handshake
在 composer 拖入 Handshake 后,您需要启用 Handshake
php bin/magento module:enable IrishTitan_Handshake
通过运行以下命令完成安装
php bin/magento setup:upgrade
如果一切顺利,您现在可以使用 Handshake 开始开发 Magento 2 模块了。
对象管理器
我们应该使用对象管理器吗?我不认为有人真正知道。无论如何,自动构造函数注入是 Magento 推荐的。然而,在某些情况下,您将需要使用对象管理器。相反,您可以使用 IrishTitan\Handshake\Core\App
类以更优雅的方式完成。
use Magento\Catalog\Model\ProductFactory; use IrishTitan\Handshake\Core\App; $productFactory = App::make(ProductFactory::class);
您还可以使用 App::get()
获取给定类的实例,如果它已经被实例化。
产品
以前,当您与 Magento 2 产品合作时,您可能需要使用 ProductFactory
、ProductRepository
、ProductCollection
等等来完成任务。现在不再是这样了。相反,您可以使用 IrishTitan\Handshake\Facades\Product
门面执行多项不同操作。例如
要按其 ID 查找产品,请使用 find
方法
$product = Product::find(23);
要按其 SKU 查找产品,请使用 whereSku
方法
$product = Product::whereSku('PROD0001');
要获取 Magento 2 目录中的所有产品,请使用 all
方法
$products = Product::all();
要向产品添加图片,请使用 addImage
方法
$product = Product::find(123); $product->addImage('path/to/first/image.jpg'); $product->addImage('path/to/second/image.jpg');
或者,您也可以这样做,因为所有 Handshake 方法都是链式可用的
Product::find(123) ->addImage('path/to/first/image.jpg') ->addImage('path/to/second/image.jpg');
要获取产品具有的所有图片的数组,请使用 images
方法
$product = Product::whereSku('PROD0002'); $images = $product->images();
要获取产品所在的全部类别,请使用 categories
方法
$product = Product::find(487); $categories = $product->categories();
要创建新产品,请使用 create
方法
$bmw = Product::create([ 'name' => 'BMW', 'sku' => 'BMW0001', 'url_key' => 'bmw0001', 'price' => 65000 ]);
要将产品分配给类别,请使用 assignToCategory
方法
$category = Category::find(2); $product = Product::find(13); $product->assignToCategory($category);
在上面的示例中,whereSku
和 find
都返回 IrishTitan\Handshake\Core\Catalog\Product
的实例。请查看此类以更好地了解其工作原理。
类别
以前,当您与 Magento 2 类别合作时,您可能需要使用 CategoryFactory
、CategoryRepository
、CategoryCollection
等等来完成任务。现在不再是这样了。相反,您可以使用 IrishTitan\Handshake\Facades\Category
门面执行多项不同操作。例如
要按其 ID 查找类别,请使用 find
方法
$category = Category::find(12);
如果找到,则 find
方法将返回 IrishTitan\Handshake\Core\Catalog\Category
的实例;如果没有找到该类别,则返回 null
。您还可以使用 findOrFail($id)
方法,如果类别未找到则抛出错误。
要按其 URL 键查找类别,请使用 whereUrlKey
方法
$category = Category::whereUrlKey('shoes');
要按其名称查找类别,请使用 whereName
方法
$category = Category::whereName('Shoes');
如果有多个类别具有相同的名称,则将返回第一个。
要获取所有类别,请使用 all
方法
$categories = Category::all();
要将产品分配给类别,请使用 addProduct
方法
$nike = Product::whereSku('NIKE0001'); $category = Category::whereUrlKey('shoes'); $category->addProduct($nike);
如果您需要嵌套类别,可以使用 setParent
方法
$cars = Category::whereUrlKey('cars'); $bmws = Category::whereUrlKey('bmws'); $bmws->setParent($cars); $bmws->save();
以上只是您可以使用的少数几种方法。请查看 IrishTitan\Handshake\Core\Catalog\Category
类以了解其他可用方法。
CLI 命令
在编写 Magento 2 的自定义功能,例如 ERP 集成或自定义脚本时,通常将其作为 CLI 命令来完成会更简单。Magento 2 有一个命令类,您可以从它继承,但编写您自己的自定义命令仍然相当繁琐。相反,您可以使用 Handshake 命令类。在使用以下命令之前,请确保您的模块具有 Commands
目录。当然,如果您使用 Handshake 的 handshake:make:module
命令创建了模块,则该目录已经存在。
要创建一个新的命令,以下是您要使用的语法
php bin/magento handshake:make:command Namespace Module CommandName
例如,您可以这样做
php bin/magento handshake:make:command Acme Forum ImportThreadsCommmand
这将在 app/code/Acme/Forum/Commands
中创建一个 ImportThreadsCommmand.php
文件。您的命令也将自动在 etc/di.xml
文件中注册,因为所有 Magento 2 命令都必须在此处注册。您可能需要运行 php bin/magento cache:clean
以使您的命令显示在命令列表中。
命令语法
例如,如果您想要能够运行
php bin/magento forum:threads:import
您将需要更新命令文件中的命令签名属性。
/** * The command syntax. * * @var string */ protected $signature = 'forum:threads:import';
命令参数
如果您需要命令接受参数,例如这样
php bin/magento forum:threads:import MagentoThreads
您可以在命令类的 arguments
属性中定义您的参数
/** * The arguments the command accepts. * * @var array */ protected $arguments = [ 'thread' => [ 'mode' => 'required', 'description' => 'The thread name to import.' ] ];
创建新模块
要创建新的 Magento 2 模块,您可以使用 handshake:make:module
命令
php bin/magento handshake:make:module Namespace Module
handshake:make:module
命令接受两个参数。 Namespace
是您的供应商名称,Module
是您模块的名称。
例如,php bin/magento handshake:make:module Acme Forum
。这将创建一个名为 app/code/Acme/Forum
的新模块。
迁移
安装 Handshake 后,将创建一个新目录:app/handshake
。这是您注册迁移和种子的地方。创建迁移后,将其添加到 migrations.php
。
要创建新的迁移,您可以使用 handshake:make:migration
命令
php bin/magento handshake:make:migration Namespace Module Migration
handshake:make:migration
命令接受三个参数。 Namespace
是您的供应商名称,Module
是您模块的名称,Migration
是您迁移的名称。
例如,php bin/magento handshake:make:migration Acme Forum CreatePostsTable
所有迁移都存储在相应模块的设置文件夹中。创建迁移后,您应将其在 app/handshake/migrations.php
中注册。
运行您的迁移
您可以使用 handshake:migrate
命令运行您的迁移。
您可以使用 handshake:migrate:rollback
命令回滚您的迁移。
许可
Handshake 模块是开源软件,根据 MIT 许可协议 许可。