protected
Yöntemler için neden eklenti oluşturmanın mümkün olmadığını merak ediyordum . Bu kod parçası Magento\Framework\Interception\Code\Generator\Interceptor
:
protected function _getClassMethods()
{
$methods = [$this->_getDefaultConstructorDefinition()];
$reflectionClass = new \ReflectionClass($this->getSourceClassName());
$publicMethods = $reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC);
foreach ($publicMethods as $method) {
if ($this->isInterceptedMethod($method)) {
$methods[] = $this->_getMethodInfo($method);
}
}
return $methods;
}
Yöntemin public
ele geçirilmesine izin vermeden önce olup olmadığını kontrol eder . Elbette, kendi modülünün preference
içinde bir oluşturularak kolayca değiştirilebilir di.xml
:
<?xml version="1.0"?>
<config>
<preference for="Magento\Framework\Interception\Code\Generator\Interceptor" type="MyVendor\MyModule\Model\MyInterceptorModel" />
</config>
ve yöntemin içine değiştirilen _getClassMethods
ile yeniden yazma .\ReflectionMethod::IS_PUBLIC
\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED
Ama merak ediyorum neden orijinal yöntem tanımında korunan yöntemlere müdahale etmek mümkün değil? Performans üzerinde büyük bir etkisi var mı, yoksa bunun 3. parti modüllerinin Magento mantığını da "dağınık" hale getirmesine izin vermek gibi başka bir nedeni var mı?