Last Updated on 2020-12-17 by aeno
To save a few bits of data you don’t have to create a specialized entity each time. Magento 2, just like its predecessor Magento 1, offers Flag models. Flag models implement a small key-value store inside the Magento database.
In Magento 1 you could use the Flag model directly. For Magento 2, we have to create a class that extends the framework Flag class so we are able to set the correct FlagCode
.
Creating flag models

In order to do this, create a new Magento module with a corresponding module.xml
and a model we will call Flag
.
A reference on how to create a new module is available in the official Magento2 Documentation.
Our module.xml
does not need any special configuration. You can keep it short and sweet:
<?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="Magegyver_Sample" setup_version="1.0.0" />
</config>
Code language: HTML, XML (xml)
The Flag model will extend \Magento\Framework\Flag
and looks like this:
<?php
namespace Magegyver\Sample\Model;
class Flag extends \Magento\Framework\Flag
{
/**
* Flag code
*
* @var string
*/
protected $_flagCode = 'magegyver_sample_flag';
}
Code language: HTML, XML (xml)
Reading and writing the Flag
That’s how we define the FlagCode
for our flag. And now we can already use it in an observer, for example:
<?php
namespace Magegyver\Sample\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class SaveImportantThings implements ObserverInterface
{
protected $flagFactory;
public function __construct(
\Magegyver\Sample\Model\FlagFactory $flagFactory
)
{
$this->flagFactory = $flagFactory;
}
public function execute(Observer $observer)
{
// initialize flag:
/** @var \Magegyver\Sample\Model\Flag $flag */
$flag = $this->flagFactory->create();
$flag->loadSelf();
// set arbitrary data
$flag->setFlagData(
[
'time' => time(),
'foo' => 'bar'
]
);
// save data
$flag->save();
}
}
Code language: HTML, XML (xml)
By the way, setFlagdata()
automatically serializes our data! 🙂
After saving we can read the information quite easily:
<?php
namespace Magegyver\Sample\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class LoadImportantThings implements ObserverInterface
{
protected $flagFactory;
public function __construct(
\Magegyver\Sample\Model\FlagFactory $flagFactory
)
{
$this->flagFactory = $flagFactory;
}
public function execute(Observer $observer)
{
// initialize flag:
/** @var \Magegyver\Sample\Model\Flag $flag */
$flag = $this->flagFactory->create();
$flag->loadSelf();
// read flag data
$importantThings = $flag->getFlagData();
}
}
Code language: HTML, XML (xml)
When reading data with getFlagData()
it also gets deserialized automatically, so we get returned an intact PHP array.
That’s it. But please keep in mind: if you want to save complex data or you want to be able to filter or read partially, you’re better off using entities. Use flags only for small, simple bits of data 😉