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.