Getting a form key for your form.
August 28, 2019
I was googling around how to add a form key to my form today, and posts out there were telling me to use the ObjectManager. Which is a terrible idea. So, here’s the right way.
Trying to figure out how to add a form key to your form? You’ll need to add Magento\Framework\Data\Form\FormKey class as a dependency to your Block, and get the form key from the method getFormKey().
Here’s a practical example:
<?php
namespace Namespace\Module\Block;
use \Magento\Framework\View\Element\Template;
use \Magento\Framework\View\Element\Template\Context;
use \Magento\Framework\Data\Form\FormKey;
class MyBlock extends Template {
    protected $formKey;
    public function __construct(FormKey $formKey, Context $context, array $data = []) 
    {
        $this->formKey = $forKey
        parent::__construct($context, $data);
    }
    public function getFormKey()
    {
         return $this->formKey->getFormKey();
    }
}
Then in your template you’ll be able to use it like so:
<?php /** @var $block \Namespace\Module\Block\MyBlock */ ?>
<form action="/myform" method="post">
    <input type="hidden" name="form_key" value="<?php echo $block->getFormKey() ?>" />
    <!-- ... Rest of your form ... -->
</form>
If you’re new to adding classes as dependencies, and want to learn more check out: Dependency injection - Magento 2 Developer Documentation
Equally, learn about why another approach that uses the ObjectManager is a terrible idea: ObjectManager - Magento 2 Developer Documentation
Until next time.