# 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()
yafterSave()
CustomViewField
-> función anónima para devolver datos a la vistaCustomAction
-> función anónima que ejecuta la acciónCustomItemAction
->execute
-> función anónima que ejecuta la acciónDataForm
->saveWith
-> functión anónima que ejecuta la acción después de guardarCard
-> función anónima para devolver datos a la vista