Magento2 дав дуже хорошу концепцію під назвою Плагін
ми можемо робити що-небудь після і до основної функції, а також у нас є ще один виклик, який буде робити і до, і після, нижче - код, який охоплюватиме всю інформацію
Створіть файл di.xml у Mymodule / etc / di.xml
<?xml version="1.0"?>
<!--
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="Magento\Catalog\Block\Product\View">
<plugin name="inroduct-custom-module" type="Sugarcode\Test\Block\Plugin\Product\View" sortOrder="1"/>
</type>
<type name="Magento\Catalog\Model\Product">
<plugin name="getname-test-module" type="Sugarcode\Test\Model\Plugin\Product" sortOrder="10"/>
</type>
</config>
в цьому я взяв приклад моделі продукту та блоку перегляду продукту
Я використовував у блоці Перегляд продукту, який є будь-якою функцією, використовуючи префікс навколо, а потім переконайтесь, що 2 параметр повинен бути, першим є той, який об'єкт використовує 2-е закриття, яке зберігає стару інформацію про повернення
<?php
namespace Sugarcode\Test\Block\Plugin\Product;
class View
{
public function aroundGetProduct(\Magento\Catalog\Block\Product\View $subject, \Closure $proceed)
{
echo 'Do Some Logic Before <br>';
$returnValue = $proceed(); // it get you old function return value
//$name='#'.$returnValue->getName().'#';
//$returnValue->setName($name);
echo 'Do Some Logic After <br>';
return $returnValue; // if its object make sure it return same object which you addition data
}
}
У моделі, яку я використовував до і після цього є
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Sugarcode\Test\Model\Plugin;
class Product
{
public function beforeSetName(\Magento\Catalog\Model\Product $subject, $name)
{
return array('(' . $name . ')');
}
public function afterGetName(\Magento\Catalog\Model\Product $subject, $result)
{
return '|' . $result . '|';
}
}
таким чином ми можемо зберегти старий код, тому, якщо завтра основний код Magento буде оновлений, у нас буде як новий оновлений код, так і наша власна логіка, якщо ми будемо безпосередньо переопрацьовані, то ми втратили новий оновлений код цієї функції або файлу :-)
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html