# Inyección de dependencias

El sistema está preparado para inyección de dependencias y poder instanciar y resolver las clases externas que se necesiten usar.

# Inyección en constructor

Se puede realizar desde el __construct de las clases de tipo BackofficeResourceSection y BackofficeCustomSection.

Por ejemplo, si necesitamos un servicio externo para rellenar las opciones de un SelectField:




 
 
 
 
 
 




 
 






class Users extends BackofficeResourceSection
{
    ...
    private $countryService;

    public function __construct(CountryService $countryService)
    {
        $this->countryService = $countryService;
    }

    protected function fields(): array
    {
        return [
            SelectField::make('País', 'country_id')
                ->options($this->countryService->getCountries());
        ];
    }

    ...
}

# Inyección en funciones anónimas

Otro sitio donde podemos instanciar dependencias es en ciertas funciones anónimas.

Por ejemplo, en una vista custom, en la función onSubmit de un DataForm:








 






class Stock extends BackofficeCustomSection
{
    protected function elements(): array
    {
        return [
        DataForm::make('Importar stock', [
            FileField::make('Archivo', 'file')
        ])->onSubmit(function (FileImporter $importer, Request $request) {
                $importer->run($request->file("file"));
            })
        ];
    }
}

# Dónde se puede usar

El listado completo de funciones donde se puede hacer uso de la inyección de dependencias:

  • DataForm -> onSubmit()
  • BackofficeResourceSection -> beforeSave() y afterSave()
  • CustomViewField -> función anónima para devolver datos a la vista
  • CustomAction -> función anónima que ejecuta la acción
  • CustomItemAction -> execute -> función anónima que ejecuta la acción
  • DataForm -> saveWith -> functión anónima que ejecuta la acción después de guardar
  • Card -> función anónima para devolver datos a la vista