Melakukan override controller magento 2

Dalam proses development aplikasi magento, terkadang kita perlu mengubah fungsional dari plugin/module bawaan maupun module lain.

Semisal kasus yang kemarin saya alami. Untuk mengubah title dari halaman Orders and Returns. Saya coba mengubah title dengan layout update dari themes ternyata tidak berhasil. Setelah saya telusuri, ternyata title tersebut di set dalam controller dari module sales magento.

sales guest form page title
vendor/magento/module-sales/Controller/Guest/Form.php
vendor/magento/module-sales/Controller/Guest/Form.php

Jadi untuk mengubah title dari controller ini saya harus melakukan override pada controller tersebut.

Membuat module

Langkah pertama yang perlu kita lakukan adalah membuat module terlebih dahulu. Di module ini kita hanya butuh registration.php, etc/module.xml, etc/di.xml, Controller/Guest/Form.php.

Pertama kita buat direktori untuk vendor dan module kita dalam direktori app/code. app/code/<Vendor>/<Module>. lalu kita buat file file yang diperlukan untuk module ini.

Pada registration.php dan etc/module.xml kita isi dengan definisi module kita. Jangan lupa untuk menyesuaikan vendor dan module sesuai module anda.

registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    '<Vendor>_<Module>',
    __DIR__
);

etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="<Vendor>_<Module>" setup_version="0.1.0.0" />
</config>

lalu pada file etc/di.xml kita mendefinisikan controller apa yang ingin kita override/extend, berikut controller target

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Sales\Controller\Guest\Form" type="<Vendor>\<Module>\Controller\Guest\Form"/>
</config>

Lalu kita bisa melakukan override pada controller tujuan pada controller kita.

Controller yang kita buat harus mengextends dari controller target.

Controller/Guest/Form.php

<?php

namespace <Vendor>\<Module>\Controller\Guest;

class Form extends \Magento\Sales\Controller\Guest\Form
{
public function execute()
    {
        $resultPage = parent::execute();
        $resultPage->getConfig()->getTitle()->set(__('Track Your Orders'));
        return $resultPage;
    }
}

Setelah itu kita aktifkan module kita dengan menjalankan upgrade dan cache flush. Jika sebelumnya anda sudah mengaktifkan mode developer, anda biasanya tidak perlu melakukan cache:flush.

php bin/magento setup:upgrade
php bin/magento cache:flush

Cara ini juga bisa dilakukan untuk override block file magento. Hanya perlu melakukan beberapa penyesuaian.

Demikian tutorial kali ini semoga bermanfaat.

Leave a Reply

%d bloggers like this: