Magento 2: Do czego służą pliki `resources.xml`?

12

W Magento 2 jednym z plików konfiguracyjnych XML modułu może być resources.xmlplik. Na przykład moduł sprzedaży ma jeden

#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>

Czy ktoś wie, do czego służą te pliki w Magento 2? Wyglądają na stary <resources/>węzeł najwyższego poziomu Magento 1 . Jednakże, ponieważ Magento nie używa konfiguracji zasobów modelu / Migracje (zamiast Magento 2 wykorzystuje zajęcia w Setup/InstallSchema.php, Setup/InstallData.php, Setup/UpgradeSchema.php, Setup/UpgradeData.phpdo zainstalowania / migracja-jak skrypty), to nie 100% jasne, co sales_setupzasób jest za.

Czy w przypadku zasobu nieinstalacyjnego jest to tylko kolejny sposób dodania klasy połączenia z bazą danych z różnymi informacjami dotyczącymi poświadczeń / parametrów połączenia? Albo coś innego?

Alan Storm
źródło
alan, mogę spojrzeć na ten plik vendor\magento\framework\App\etc\resources.xsd"(4,41). może dać jakiś pomysł
Amit Bera
1
@AmitBera To mówi, jak powinny wyglądać dane w pliku resources.xml, nie mówi nam, do czego system używa tych plików.
Alan Storm
Przepraszam, nie miałem żadnego jasnego pojęcia na ten temat. Jeśli zdobędę jakiś punkt, opublikuję
Amit Bera

Odpowiedzi:

10

Myślę, że zasoby odnoszą się do faktycznego połączenia z bazą danych. M1 w przeszłości miał coś takiego:

   <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>

więc powiedziałbym, że plik zasobów jest następcą tego połączenia.

Nie jestem pewien, czy węzeł _setup zapewnia dużo więcej wartości niż drugi wiersz, ponieważ mamy ten kod

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

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

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

a także w 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;
    }
}

Rzuciłem okiem na niektóre moduły korporacyjne, aby zobaczyć, czy to rzuci więcej światła na wykorzystanie resources.xmlpliku (ponieważ wiele dbs jest najwyraźniej funkcją M2 Enterprise), ale jedyne zastosowanie, które do tej pory spotkałem, również rozszerza z core.

Mam przeczucie, że trzeba by utworzyć dodatkowe połączenia db, w app/etc/env.phpktórych następnie można użyć tych wartości, aby zastąpić te dostarczone w domyślnych resource.xmlplikach (tj. Tylko 1 domyślne połączenie).

Kristof w Fooman
źródło
2
Podsumowując: „resources.xml” pozwala programistom rozszerzeń określić informacje o dziedziczeniu zasobów i informacje o połączeniu.
Anton Kril,