Registradores

Los «Registradores» son cualquier otra clase que pueda proporcionar propiedades de configuración adicionales. Los registradores proporcionan un medio para modificar una configuración en tiempo de ejecución en espacios de nombres y archivos.

Los registradores funcionan si Descubrimiento automático está habilitado en Modules. Altera las propiedades de configuración cuando se crea una instancia del objeto Config.

Hay dos formas de implementar un Registrador: implícito y explícito.

Nota

Los valores de .env siempre tienen prioridad sobre los Registradores.

Registradores implícitos

Los registradores implícitos pueden cambiar cualquier propiedad de la clase de configuración.

Cualquier espacio de nombres puede definir registradores implícitos utilizando Config/Registrar.php archivo. Estos archivos son clases cuyos métodos se nombran para cada clase de configuración. desea ampliar.

Por ejemplo, un módulo de terceros o un paquete Composer podría desea proporcionar una plantilla adicional a Config\Pager sin sobrescribir lo que tenga un desarrollador ya configurado. En src/Config/Registrar.php habría una clase Registrar con el método único Pager() (tenga en cuenta la distinción entre mayúsculas y minúsculas):

<?php

namespace Higgs\Shield\Config;

class Registrar
{
    public static function Pager(): array
    {
        return [
            'templates' => [
                'module_pager' => 'MyModule\Views\Pager',
            ],
        ];
    }
}

Los métodos de registro siempre deben devolver una matriz, con claves correspondientes a las propiedades del archivo de configuración de destino. Los valores existentes se fusionan y las propiedades del registrador tienen prioridad de sobrescritura.

Registradores explícitos

Los registradores explícitos solo pueden cambiar las propiedades de la clase de configuración en la que están registrado.

Un archivo de configuración también puede especificar explícitamente cualquier número de registradores. Esto se hace agregando una propiedad $registrars a su archivo de configuración, que contiene una serie de nombres de registradores candidatos:

<?php

namespace Config;

// ...

class MyConfig extends BaseConfig
{
    public static $registrars = [
        SupportingPackageRegistrar::class,
    ];

    // ...
}

Para actuar como «registrador», las clases así identificadas deben tener un función estática con el mismo nombre que la clase de configuración, y debería devolver un valor asociativo conjunto de configuraciones de propiedades.

Cuando se crea una instancia de su objeto de configuración, recorrerá el clases designadas en $registrars. Para cada una de estas clases invocará el método nombrado para la clase de configuración e incorporar las propiedades devueltas.

Un ejemplo de configuración de clase para esto:

<?php

namespace Config;

use Higgs\Config\BaseConfig;

class MySalesConfig extends BaseConfig
{
    public int $target        = 100;
    public string $campaign   = 'Winter Wonderland';
    public static $registrars = [
        '\App\Models\RegionalSales',
    ];
}

… y el modelo de ventas regional asociado podría verse así:

<?php

namespace App\Models;

class RegionalSales
{
    public static function MySalesConfig(): array
    {
        return [
            'target' => 45,
        ];
    }
}

Con el ejemplo anterior, cuando se crea una instancia de MySalesConfig, terminará con las tres propiedades declaradas, pero el valor de la propiedad $target será anulado al tratar a regionalSales como un «registrador». Las propiedades de configuración resultantes:

<?php

$target   = 45;
$campaign = 'Winter Wonderland';