$ block Class Einige Methoden werden im Aufruf von get_class_methods () nicht angezeigt

7

Ich arbeite in der Datei \ success.phtml mit dem Endziel, einen Tracking-Iframe auf der Bestätigungsseite zu platzieren.

<?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>

Ich versuche, auf die Produkt- / Warenkorbinformationen der Bestellung zuzugreifen, daher habe ich wie oben gezeigt einen Aufruf von get_class_methods ($ block) ausgeführt. Die Ausgabe besagte, dass $ block 80 verschiedene Methoden hat, aber keine der aufgelisteten Methoden war getOrderId (), was mich verwirrt, da diese Methode in der Datei verwendet wird. Kann jemand das erklären? Wäre es auch möglich, aus einer anderen Datei auf die Methoden einer $ block-Klasse zuzugreifen? Ich bin ziemlich neu in der Codierung, daher bin ich ziemlich verwirrt.

Degnan
quelle

Antworten:

7

Währenddessen verwendet Magento eine Reihe von magischen Methoden (sie beginnen mit get, set, uns und has), die nicht in der Methodenliste angezeigt werden.

Diese Methoden sind Verknüpfungen für den Zugriff auf Daten, die für das Objekt festgelegt wurden. Die meisten dieser Klassen erstrecken sich von der Basisklasse \Magento\Framework\DataObjecteinschließlich Blockklassen.

In diesem speziellen Fall wird der Block hier mit Daten initialisiert 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()
        ]
    );
}

Von Interesse ist die letzte Zeile, in der wir das Auftragsinkrement zur Dateneigenschaft hinzufügen.

Darauf kann dann später zugegriffen werden, über $block->getOrderId() den auch anders angegeben werden kann $block->getData('order_id').

Kristof bei Fooman
quelle
Kann eine dieser "magischen" Methoden Warenkorbdaten abrufen?
Degnan
1
Die obigen Daten sind die einzigen Informationen, die dem Block zur Verfügung gestellt werden. Sie möchten die Bestellung wahrscheinlich über die order_id laden und haben dann Zugriff auf alle bestellten Artikel.
Kristof bei Fooman