Magento 2: ¿Para qué se utilizan los archivos `resources.xml`?

12

En Magento 2, uno de los archivos de configuración XML que puede tener un módulo es el resources.xmlarchivo. Por ejemplo, el módulo de ventas tiene uno

#File: vendor/magento/module-sales/etc/resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/resources.xsd">
    <resource name="sales_setup" extends="core_setup" />
    <resource name="sales" extends="core" />
</config>

¿Alguien sabe para qué se utilizan estos archivos en Magento 2? Parecen ser el antiguo <resources/>nodo de nivel superior de Magento 1 . Sin embargo, desde Magento ya no utiliza el programa de instalación de recursos Modelo / Migraciones (en lugar de Magento 2 clases de usos en Setup/InstallSchema.php, Setup/InstallData.php, Setup/UpgradeSchema.php, Setup/UpgradeData.phppara la instalación / migración como guiones), no es 100% claro lo que el sales_setuprecurso es para.

Para el recurso no configurado, ¿es esta otra forma de agregar una clase de conexión de base de datos con diferentes credenciales / información de cadena de conexión? ¿O algo mas?

Alan Storm
fuente
Alan, ¿puedes mirar este archivo vendor\magento\framework\App\etc\resources.xsd"(4,41)? se puede dar alguna idea
Amit Bera
1
@AmitBera Eso indica cómo deberían aparecer los datos en resources.xml, no nos dice para qué utiliza el sistema estos archivos.
Alan Storm
Lo siento, no tenía una idea clara sobre esto. Si tengo algún punto, entonces publicaré
Amit Bera

Respuestas:

10

Creo que los recursos están relacionados con la conexión real de la base de datos. M1 en el pasado tenía algo como esto:

   <resources>
        <backup_setup>
            <setup>
                <module>Mage_Backup</module>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </backup_setup>
        <backup_write>
            <connection>
                <use>core_write</use>
            </connection>
        </backup_write>
        <backup_read>
            <connection>
                <use>core_read</use>
            </connection>
        </backup_read>
    </resources>

entonces diría que el archivo de recursos es el sucesor de la conexión.

No estoy seguro de que el nodo _setup proporcione mucho valor por encima de la otra línea ya que tenemos este código en

lib / internal / Magento / Framework / App / ResourceConnection / Config.php

public function getConnectionName($resourceName)
{
    $connectionName = \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION;

    $resourceName = preg_replace("/_setup$/", '', $resourceName);

y también en setup / src / Magento / Setup / Module / Setup / ResourceConfig.php

class ResourceConfig implements \Magento\Framework\App\ResourceConnection\ConfigInterface
{
    /**
     * {@inheritdoc}
     */
    public function getConnectionName($resourceName)
    {
        return \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION;
    }
}

Eché un vistazo rápido a algunos de los módulos empresariales para ver si eso arroja más luz sobre el uso del resources.xmlarchivo (ya que múltiples dbs aparentemente es una característica de M2 ​​Enterprise), pero el único uso que he encontrado hasta ahora también solo se extiende de core.

Mi presentimiento es que uno necesitaría crear conexiones db adicionales en las app/etc/env.phpque luego le permita usar esos valores para anular los que se envían en los resource.xmlarchivos predeterminados (es decir, solo la 1 conexión predeterminada).

Kristof en Fooman
fuente
2
Solo para resumir: 'resources.xml' permite al desarrollador de extensiones especificar información de herencia de recursos e información de enlace de conexión.
Anton Kril