Parche
Un parche es un archivo que contiene instrucciones para cambiar directamente el código en un archivo que no está bajo el control directo del equipo de desarrollo. Esta es una opción que generalmente debe considerarse como un último recurso cuando no existen otras opciones. Los parches están pensados para ser una solución temporal. Si tiene que crear un parche, como práctica recomendada general, quítelo en favor de una solución más permanente en las siguientes 2-4 semanas.
Los parches se rompen fácilmente. Si se actualizan los archivos a los que se dirige el parche, a menudo el parche deja de funcionar. Esto se debe a que un archivo de parche contiene números de línea y números de columna que indican específicamente lo que debe cambiar el parche. Si algo no coincide con lo que esperaba el parche, deja de aplicarse y rompe el código.
diff --git a/vendor/magento/module-quote/Model/QuoteManagement.php b/vendor/magento/module-quote/Model/QuoteManagement.php
index 51b68411d40..ac4a3468322 100644
--- a/vendor/magento/module-quote/Model/QuoteManagement.php
+++ b/vendor/magento/module-quote/Model/QuoteManagement.php
@@ -424,8 +424,9 @@ class QuoteManagement implements CartManagementInterface
}
}
$quote->setCustomerIsGuest(true);
- $groupId = $customer ? $customer->getGroupId() : GroupInterface::NOT_LOGGED_IN_ID;
- $quote->setCustomerGroupId($groupId);
+ $quote->setCustomerGroupId(
+ $quote->getCustomerId() ? $customer->getGroupId() : GroupInterface::NOT_LOGGED_IN_ID
+ );
}
$remoteAddress = $this->remoteAddress->getRemoteAddress();
Qué se puede cambiar con un parche
Cualquier cosa. Literalmente, cualquier carácter dentro de cualquier archivo de destino puede cambiarse. Los parches no se limitan a ningún tipo de archivo o lenguaje de código en particular. Normalmente, utilizaría un parche para los archivos de destino dentro del directorio vendor
.
Cuándo usar un parche
Si te das cuenta de que no existe otra opción. Por ejemplo, cuando el proveedor aún no ha publicado una corrección para el código, puede utilizar un parche para solucionar temporalmente el problema mientras espera una solución permanente.
Inconvenientes
Los parches se rompen fácilmente. En el momento en que el código objetivo cambia, el parche deja de funcionar. Están pensados para ser una solución a corto plazo solamente.
Preferencia
Una preferencia es un concepto diseñado en la plataforma de Adobe Commerce. Es esencialmente un "reemplazo de clase PHP".
La plataforma Adobe Commerce usa un "gestor de objetos" para crear instancias de clases PHP porque no crea instancias de clases PHP con la nueva palabra clave como se hace en las aplicaciones PHP tradicionales. En su lugar, el administrador de objetos hace referencias cruzadas al nombre de la clase PHP que se va a crear con una configuración compilada para determinar si algún módulo ha declarado una preferencia para la clase original. Si se encuentra una preferencia para la clase PHP, el administrador de objetos crea una instancia de la clase especificada en su lugar.
Cabe señalar que (por lo general) la nueva clase PHP que reemplaza la clase PHP original se extiende/hereda de la clase PHP original. Esto se hace por un par de razones:
- Para garantizar que se cumple la inyección de dependencia/sugerencia de tipo. De lo contrario, se produce un error grave y la aplicación se interrumpe.
- Para permitir una escritura mínima del código. Si la clase PHP original contiene diez métodos pero sólo necesita anular uno, normalmente puede cambiar un método y dejar intactos los otros nueve. Esto es importante para asegurarse de que no está bloqueando las actualizaciones de la funcionalidad principal a medida que la plataforma se actualiza a nuevas versiones.