класс $block Какой-то метод не будет отображаться в вызове методов класса get()


Я работаю в файле \success.phtml, конечной целью которого является размещение iframe отслеживания на странице подтверждения.

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

// @codingStandardsIgnoreFile
?>
<?php /** @var $block \Magento\Checkout\Block\Onepage\Success  **/?>


<div class="checkout-success">
<?php if ($block->getOrderId()):?>
    <?php if ($block->getCanViewOrder()) :?>
        <p><?= __('Your order number is: %1.', sprintf('<a href="%s" class="order-number"><strong>%s</strong></a>', $block->escapeHtml($block->getViewOrderUrl()), $block->escapeHtml($block->getOrderId()))) ?></p>
    <?php  else :?>
        <p><?= __('Your order # is: <span>%1</span>.', $block->escapeHtml($block->getOrderId())) ?></p>
    <?php endif;?>
        <p><?= /* @escapeNotVerified */ __('We\'ll email you an order confirmation with details and tracking info.') ?></p>
<?php endif;?>

<?= $block->getAdditionalInfoHtml() ?>

<div class="actions-toolbar">
    <div class="primary">
        <a class="action primary continue" href="<?= /* @escapeNotVerified 
         */ $block->getContinueUrl() ?>"><span><?= /* @escapeNotVerified */ 
         __('Continue Shopping') ?></span></a>
    </div>
</div>
</div>
<div>
<?php
    $block_methods = get_class_methods($block);
?>
</div>
<script type="text/javascript">
    var obj = <?php echo json_encode($block_methods); ?>;
    console.log(obj);
</script>

Я пытаюсь получить доступ к информации о товаре/корзине покупок заказа, поэтому я сделал вызов get_class_methods($block), как показано выше. В выводе говорилось, что $block имеет 80 различных методов, но ни один из перечисленных методов не был getOrderId(), что меня смущает, так как этот метод используется в файле. Кто-нибудь может это объяснить? Также было бы это возможно, для доступа к методам класса $block из другого файла? Я довольно новичок в кодировании, поэтому я довольно смущен этим.

Author: Himanshu, 2018-09-12

1 answers

Повсюду Magento использует ряд магических методов (они начинаются с get, set, uns и has), которые не отображаются в списке методов.

Эти методы являются ярлыками для доступа к данным, заданным для объекта. Большинство из этих классов являются продолжением базового класса \Magento\Framework\DataObject, включая классы блоков.

В данном конкретном случае блок инициализируется данными здесь vendor/magento/module-checkout/Block/Onepage/Success.php

protected function prepareBlockData()
{
    $order = $this->_checkoutSession->getLastRealOrder();

    $this->addData(
        [
            'is_order_visible' => $this->isVisible($order),
            'view_order_url' => $this->getUrl(
                'sales/order/view/',
                ['order_id' => $order->getEntityId()]
            ),
            'print_url' => $this->getUrl(
                'sales/order/print',
                ['order_id' => $order->getEntityId()]
            ),
            'can_print_order' => $this->isVisible($order),
            'can_view_order'  => $this->canViewOrder($order),
            'order_id'  => $order->getIncrementId()
        ]
    );
}

Интерес представляет последняя строка, в которой мы добавляем приращение порядка к данным собственность.

Позже к этому можно будет получить доступ через $block->getOrderId() что также можно выразить по-другому с помощью $block->getData('order_id').

 7
Author: Kristof at Fooman, 2018-09-13 00:30:31