Calling Magento data structures can be confusing. There are many classes available, and knowing which to call and when can be confusing & overwhelming.
This module aims to simplify calling these data structures. All classes are prefixed with Simple
so they are easy to lookup within IDEs. They also follow a pretty standard naming convention which aligns with Magento's way of naming modules. It also provides a SimpleDataPatch
class which greatly simplifies writing data patch scripts.
For example, here is a data patch script to update the content of a CMS page with and without SimpleData
:
composer require markshust/magento2-module-simpledata
bin/magento module:enable MarkShust_SimpleData
bin/magento setup:upgrade
Here are the signatures of the simplified data structures classes:
MarkShust\SimpleData\Api\Data\Cms\SimpleBlock
/**
* Delete a block from a given identifier and optional store id.
* @param string $identifier
* @param int $storeId
*/
public function delete(string $identifier, int $storeId = Store::DEFAULT_STORE_ID): void
/**
* If the CMS block identifier is found, attempt to update the record.
* If it is not found, attempt to create a new record.
* @param array $data
*/
public function save(array $data): void
MarkShust\SimpleData\Api\Data\Cms\SimplePage
/**
* Delete a page from a given identifier and optional store id.
* @param string $identifier
* @param int $storeId
*/
public function delete(string $identifier, int $storeId = Store::DEFAULT_STORE_ID): void
/**
* If the CMS page identifier is found, attempt to update the record.
* If it is not found, attempt to create a new record.
* @param array $data
*/
public function save(array $data): void
<?php
declare(strict_types = 1);
namespace MarkShust\Data\Setup\Patch\Data;
use MarkShust\SimpleData\Setup\Patch\SimpleDataPatch;
class BlockFooBarCreate extends SimpleDataPatch
{
public function apply(): self
{
$this->block->save([
'identifier' => 'foo_bar',
'title' => 'Foo bar',
'content' => <<<CONTENT
<div class="foo-bar">
Foo bar
</div>
CONTENT,
]);
}
}
<?php
declare(strict_types = 1);
namespace MarkShust\Data\Setup\Patch\Data;
use MarkShust\SimpleData\Setup\Patch\SimpleDataPatch;
class BlockFooBarDelete extends SimpleDataPatch
{
public function apply()
{
$this->block->delete('foo_bar');
}
}
<?php
declare(strict_types = 1);
namespace MarkShust\Data\Setup\Patch\Data;
use MarkShust\SimpleData\Setup\Patch\SimpleDataPatch;
class BlockFooBarUpdate extends SimpleDataPatch
{
public function apply()
{
$this->block->save([
'identifier' => 'foo_bar',
'title' => 'Foo bar 1',
]);
}
}
<?php
declare(strict_types = 1);
namespace MarkShust\Data\Setup\Patch\Data;
use MarkShust\SimpleData\Setup\Patch\SimpleDataPatch;
class PageFooBarCreate extends SimpleDataPatch
{
public function apply()
{
$this->page->save([
'identifier' => 'foo_bar',
'title' => 'Foo bar',
'content' => <<<CONTENT
<div class="foo-bar">
Foo bar
</div>
CONTENT,
]);
}
}
<?php
declare(strict_types = 1);
namespace MarkShust\Data\Setup\Patch\Data;
use MarkShust\SimpleData\Setup\Patch\SimpleDataPatch;
class MyDataPatch extends SimpleDataPatch
{
public function apply()
{
$this->page->save([
'identifier' => 'foo_bar',
'title' => 'Foo bar 1',
]);
}
}
<?php
declare(strict_types = 1);
namespace MarkShust\Data\Setup\Patch\Data;
use MarkShust\SimpleData\Setup\Patch\SimpleDataPatch;
class PageFooBarDelete extends SimpleDataPatch
{
public function apply()
{
$this->page->delete('foo_bar');
}
}
<?php
namespace MarkShust\Data\Setup\Patch\Data;
use MarkShust\SimpleData\Setup\Patch\SimpleDataPatch;
class ConfigFooBarCreate extends SimpleDataPatch
{
public function apply()
{
$this->config->save('foo/bar', 'baz');
}
}
<?php
namespace MarkShust\Data\Setup\Patch\Data;
use MarkShust\SimpleData\Setup\Patch\SimpleDataPatch;
class ConfigFooBarDelete extends SimpleDataPatch
{
public function apply()
{
$this->config->delete('foo/bar');
}
}
<?php
declare(strict_types = 1);
namespace MarkShust\SimpleData;
use MarkShust\SimpleData\Api\Cms\SimpleBlock;
class MyClass
{
/** @var SimpleBlock */
protected $block;
/**
* SimpleDataPatch constructor.
* @param SimpleBlock $simpleBlock
*/
public function __construct(
SimpleBlock $simpleBlock
) {
$this->block = $simpleBlock;
}
/**
* {@inheritdoc}
*/
public function execute(): void
{
$this->block->save([
'identifier' => 'foo_bar',
'title' => 'Foo bar',
'content' => <<<CONTENT
<div class="foo-bar">
Foo bar
</div>
CONTENT,
]);
// Carry out other actions...
}
}