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>
в этом я взял пример модели продукта и блока просмотра продукта
Я использовал в блоке Product View, который является префиксом любой функции, и затем убедитесь, что 2 параметра должны быть там. Первый - это объект, который вы используете, 2-й. Closure, который сохраняет старую возвращаемую информацию.
<?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