класс $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 из другого файла? Я довольно новичок в кодировании, поэтому я довольно смущен этим.
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')
.