Відповіді:
Клавіші форми в 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()
Сподіваюся, це допомагає!
Дякую