---
title: "DI a akcie — Imports for Laravel | Roundly"
description: "Bez fasády: injektujte ImportsManager alebo zavolajte jednoúčelovú akciu — každá akcia pre aplikáciu so signatúrou execute() a cestou cez fasádu."
url: https://roundly-consulting.com/sk/open-source/navody/imports-for-laravel/bez-fasady
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Imports for Laravel](https://roundly-consulting.com/sk/open-source/navody/imports-for-laravel.md)

# DI a akcie

Fasáda je odporúčaná predvolená cesta, nie jediná. Každá operácia je akcia, manažér sprístupňuje každú z nich a fasáda je nadstavba nad manažérom — všetky tri spúšťajú rovnaký kód. Manažér je RoundlyConsulting\\Imports\\ImportsManager, koreň fasády, zaregistrovaný v kontajneri ako singleton:

```php
use RoundlyConsulting\Imports\Actions\Sessions\UploadImportAction;
use RoundlyConsulting\Imports\DataTransferObjects\{ImportSource, UploadData};
use RoundlyConsulting\Imports\Facades\Imports;
use RoundlyConsulting\Imports\ImportsManager;

// 1. Facade
$session = Imports::for($team)->by($user)->upload('assets', $request->file('file'));

// 2. Dependency injection — the same object the facade resolves (a container singleton)
public function __construct(private ImportsManager $imports) {}
$session = $this->imports->for($team)->by($user)->upload('assets', $request->file('file'));

// 3. The raw action — returns the model, not a handle
$model = app(UploadImportAction::class)->execute(
    new UploadData('assets', $team, $user, ImportSource::upload($request->file('file'))),
);
$session = Imports::session($model);   // wrap it in a handle (trusted path)
```

## Injektujte manažér

```php
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use RoundlyConsulting\Imports\ImportsManager;

final class AssetImportController
{
    public function __construct(private ImportsManager $imports) {}

    public function store(Request $request): JsonResponse
    {
        $session = $this->imports->for($request->user()->currentTeam)->by($request->user())
            ->upload('assets', $request->file('file'))
            ->preview();

        return response()->json($session->counts()->toArray());
    }
}
```

Manažér zámerne nie je final — fake ho rozširuje, takže kód, ktorý injektuje ImportsManager, pod Imports::fake() stále prejde typovou kontrolou a je tiež nahrádzaný fakom.

## Zavolajte akciu

Akcie sú triedy final readonly s jednou metódou execute(). Vytvárajte ich cez kontajner. Prijímajú a vracajú modely, nie handle — ak handle potrebujete, model zabaľte cez Imports::session($model) alebo Imports::batch($model):

```php
use RoundlyConsulting\Imports\Actions\Commit\CommitImportAction;
use RoundlyConsulting\Imports\Actions\Mapping\SaveMappingAction;
use RoundlyConsulting\Imports\Actions\Templates\BuildTemplateAction;
use RoundlyConsulting\Imports\DataTransferObjects\SaveMappingData;
use RoundlyConsulting\Imports\Enums\TemplateFormat;

$template = app(BuildTemplateAction::class)->execute('assets', TemplateFormat::Csv, 'sk');
$batch = app(CommitImportAction::class)->execute($sessionModel, $user);   // an ImportBatch model

app(SaveMappingAction::class)->execute(
    SaveMappingData::fromColumns($team, 'assets', 'ERP', ['Inventárne č.' => 'asset_tag'], $user),
);
```

## Metóda fasády → akcia

Menné priestory sú relatívne k RoundlyConsulting\\Imports\\Actions:

| Akcia | execute(…) | Vracia | Cesta cez fasádu |
| --- | --- | --- | --- |
| `Templates\BuildTemplateAction` | `(string $importer, TemplateFormat $format, ?string $locale = null)` | `Template` | template() · importer()->template() |
| `Sessions\UploadImportAction` | `(UploadData $data)` | `ImportSession` | for()->upload() |
| `Sessions\UploadFilesAction` | `(UploadFilesData $data)` | `ImportSession` | for()->uploadFiles() |
| `Sessions\ConfigureSourceAction` | `(ImportSession $session, ?Model $actor, $sheet = null, ?string $delimiter = null, ?int $headerRow = null)` | `ImportSession` | useSheet() · useDelimiter() · useHeaderRow() |
| `Sessions\DiscardImportAction` | `(ImportSession $session, ?Model $actor)` | `ImportSession` | discard() |
| `Mapping\SuggestMappingAction` | `(ImportSession $session, ?Model $actor)` | `MappingSuggestion` | suggestMapping() |
| `Mapping\ApplyMappingAction` | `(ImportSession $session, array\|ColumnMapping $mapping, ?Model $actor)` | `ImportSession` | map() |
| `Mapping\SaveMappingAction` | `(SaveMappingData $data)` | `SavedMapping` | saveMapping() · mappings()->save() |
| `Mapping\DeleteSavedMappingAction` | `(Model $owner, string $importer, string $name, ?Model $actor)` | `bool` | mappings()->delete() |
| `Preview\PreviewImportAction` | `(ImportSession $session, ?Model $actor, ?bool $queue = null)` | `ImportSession` | preview() |
| `Preview\ChooseModeAction` | `(ImportSession $session, DuplicateMode $mode, ?Model $actor)` | `ImportSession` | mode() |
| `Preview\BuildErrorReportAction` | `(ImportSession $session, TemplateFormat $format, ?Model $actor)` | `Template` | errorReport() |
| `Commit\CommitImportAction` | `(ImportSession $session, ?Model $actor)` | `ImportBatch` | commit() |
| `Commit\CancelImportAction` | `(ImportBatch $batch, ?Model $actor)` | `ImportBatch` | cancel() |
| `Commit\ResumeImportAction` | `(ImportBatch $batch, ?Model $actor)` | `ImportBatch` | resume() |
| `Rollback\RollbackImportAction` | `(ImportBatch $batch, ?Model $actor)` | `ImportBatch` | rollback() |
| `Maintenance\PruneImportsAction · SweepImportsAction` | `()` | `PruneReport · SweepReport` | prune() · sweep() |

- Fasáda aj manažér vytvárajú každú akciu cez kontajner, takže väzba vlastnej podtriedy akcie platí vo všetkých troch štýloch.
- Imports::fake() zaznamenáva volania cez fasádu, manažér, každý handle aj pomocníkov na modeloch ($session->handle(), $batch->handle()).
- Interné stavebné bloky — ValidateRowsAction, ClassifyRowsAction, PreviewFilesAction, ProcessChunkAction, FinishImportAction, FailImportAction, RollbackChunkAction a FinishRollbackAction, ktoré spúšťajú úlohy a sweep — nie sú určené pre kód aplikácie.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/imports-for-laravel.md)
