Что такое getBlockHtml ('formkey')?

19

Я пытаюсь отредактировать страницу редактирования продукта (первая вкладка) в Magento и хотел бы переместить количество (а также несколько других вещей) с соответствующих вкладок на первую страницу. я вижу

<form action="<?php echo $this->getSaveUrl() ?>" method="post" id="product_edit_form" enctype="multipart/form-data">
<?php echo $this->getBlockHtml('formkey')?>
<div style="display:none"></div>
</form>

и знать, что код для текстового поля количества

    <tr>
        <td class="label"><label for="inventory_qty"><?php echo Mage::helper('catalog')->__('Qty') ?><span class="required">*</span></label></td>
        <td class="value">
            <?php if (!$_readonly):?>
            <input type="hidden" id="original_inventory_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][original_inventory_qty]" value="<?php echo $this->getFieldValue('qty')*1 ?>"/>
            <?php endif;?>
            <input type="text" class="input-text required-entry validate-number" id="inventory_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][qty]" value="<?php echo $this->getFieldValue('qty')*1 ?>" <?php echo $_readonly;?>/>
        </td>
        <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
    </tr>

Кто-нибудь знает, где находится код для первой вкладки? Это как-то связано с formkey?

Благодарность!

new2programming
источник

Ответы:

43

Ключи форм в 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 на вывод и сохранение уникального ключа формы для пользовательского сеанса. Все действия контроллера Magento, защищенные CSRF, проверят это, прежде чем делать что-либо ценное.

НТН!

philwinkle
источник
Ну, это, конечно, объясняет, что они делают, и я очень благодарен вам. Теперь я все еще пытаюсь выяснить, как добавить это количество <tr> в первую вкладку редактирования моего продукта. Мысли? Я могу сделать это только наверху, но я хочу, чтобы это было одно из включенных полей, поэтому похоже, что оно должно быть там.
new2programming
Последнее предложение заставляет меня задуматься о том, существуют ли контроллеры Magento , которые не защищены CSRF o_O
Ник Роландо,