文章彙整

Magento2 開發 – 使用 Plugin 改變原生行為 (一)

Astral WebBy Astral Web 5 months agoNo Comments
首頁  /  Magento  /  Magento-2  /  Magento2 開發 – 使用 Plugin 改變原生行為 (一)

Magento 提供多種覆寫方法便於開發者進行客製,今天我們要介紹的方式- Plugin,是屬於較小範圍的改寫。

這種覆寫方式,會針對某個特定的類別,改變其所屬方法(method)的實際行為,而置入客製程式的方式,則依置入點細分三種: 方法之前(before),與方法當中(around) ,方法之後(after)。每種方式概念相仿,細節有異,今天要實際帶大家先了解的是 before  Plugin的實作。

我們知道一個function會有輸入參數跟輸出值,before就是針對輸入的的參數去包覆客製行為,也就是說,可以在參數傳遞進方法被執行前,對其值進行調整。

舉例來說,假設有個用來計算金額的類別

現在有一個套件 ExampleA,需要針對這個計算金額中的價格參數(price)固定增加10,由於其他所有使用這個了類別計算的地方,都必須套用這個客製,比起去改寫所有使用到這個類別的程式區塊,直接用 before 的 Plugin覆寫它會更為有效率且避免程式碼的重複。

首先,我們需要在該套件 Custom/ExampleA/etc/di.xml 裡定義覆寫的主客體。這裡我們使用類別 Custom\ExampleA\Plugin\Magento\Example\Model\SummaryAmount 去複寫 Magento\ExampleA\Model\SummaryAmount

接著實作覆寫類別

在該類別中,實作要寫的那個方法,並在方法名稱加上before前綴,注意需用駝峰式大小寫。

該方法的第一個參數固定為原類別的物件,第二個開始依序為原方法的傳入參數值。

而方法的輸出是以一維陣列形式,依序放入調整後的參數值。

完成後執行測試

$summaryAmount = \Magento\Framework\App\ObjectManager::getInstance()->get(‘Magento\Example\Model\SummaryAmount’)

echo ‘</br>[’ . $summaryAmount->calculate(2, 20, 1) .’]’;

就會得到 2 * (20 + 10) * 1 = 60

[60]

不過實務上並不會這麼單純,假設又有另一個套件ExampleB想要調整這個計算參數,希望價格參數乘上兩倍,這時就有順序問題。這裡我們期望在ExampleA加10前先由ExampleB乘二。

這個順序可以在Custom/ExampleB/etc/di.xml裡指定排在ExampleA前,將sortOrder數值設為5,小於ExampleA Plugin的10。

實作覆寫類別

再次執行測試

這回得到就是ExampleA與ExampleB的客製結果囉!

2 * (20 * 2[ExampleB] + 10[ExampleA]) * 1 = 100

[100]

依照以上實作規則,就可以讓多個套件依照其客製性質,去調整原生或者第三方套件所屬類別下的方法參數。下回我們會繼續手把手,帶大家實作around的Plugin,覺得官方文件簡潔不易理解的開發者,千萬不要錯過我們的分享喔!

 

如果您有更多疑問可以詢問我們,未來會撰寫更多電商網站相關文章,您想知道什麼嗎?歡迎在下方留言給我們。或追蹤我們的粉絲專頁ig,也別忘了訂閱我們的電子報,就不錯過最新文章喔!

想學習更多Magento設定嗎?請見:Magento教學導覽

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Categories:
  Magento-2MagentoMagento開發

留下回應

你的電子郵件地址不會被公開.

請到您的信箱確認,即可完成訂閱。