Відповіді:
Клавіші форми в Magento - це засіб запобігання підробці підписів на веб-сайті , коротше кажучи, це захищає вас від людей, які намагаються розміщувати ваші форми (наприклад, додати в кошик) з інших сайтів, що представляють вас.
Це може бути небезпечно, оскільки хтось теоретично може створити власну форму та розмістити будь-яку дію контролера обробника форми у вашому магазині. Захист CSRF по суті ігнорує будь-яку публікацію, яка не може перевірити включений параметр form_key з повідомленням форми.
<?php echo $this->getBlockHtml('formkey')?>
Він каже Magento шукати блок макета з назвою "formkey" і виводити його. У Magento це, як правило, якийсь файл, який має в ньому:
<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>
Це вказує Magento виводити та зберігати унікальний ключ форми для сеансу користувача. Усі дії, захищені CSRF контролером Magento, перевірятимуть це, перш ніж робити щось важливе.
\Magento\Framework\Data\Form\FormKey\Validator.
Ви можете додати formkey за цим кодом:
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$FormKey = $objectManager->get('Magento\Framework\Data\Form\FormKey');
?>
//Hidden form key field after <form> tag
<input name="form_key" type="hidden" value="<?php echo $FormKey->getFormKey();?>">
Якщо ви хочете додати ключ форми у файл phtml, тоді використовуйте direct
$ this-> getFormKey ()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
Використання ін'єкції залежності в конструкторі класу:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
Примітка. Не використовуйте менеджер об'єктів безпосередньо у файлах phtml
ObjectManagerвикористовувати в інтернеті, це не є хорошою практикою.
Немає необхідності в ініціалізації диспетчера об'єктів і все, що можна використовувати.
window.FORM_KEY
Frontend ви можете використовувати:
$block->getKey()
Сподіваюся, це допомагає!
Дякую