Fasáda Imports
Všetko ide cez jednu fasádu RoundlyConsulting\Imports\Facades\Imports, ktorá je nadstavbou nad singletonom ImportsManager. Je zaregistrovaná aj ako globálny alias Imports:
use RoundlyConsulting\Imports\Enums\{SessionStatus, TemplateFormat};
use RoundlyConsulting\Imports\Facades\Imports;
// Importers and templates
Imports::importers()->available($user, $team);
Imports::register(AssetsImporter::class);
Imports::importer('assets')->descriptor('sk');
Imports::template('assets', TemplateFormat::Xlsx, locale: 'sk')->download();
// Everything for one owner — the entry point HTTP code uses
$imports = Imports::for($team)->by($user);
$session = $imports->upload('assets', $request->file('file'));
$files = $imports->uploadFiles('documents', $request->file('files'));
$imports->sessions('assets', SessionStatus::Previewed)->paginate();
$imports->session($id)->counts();
$imports->batch($id)->summary();
$imports->mappings('assets')->all();
$imports->running('assets');
// Trusted paths, the reader and housekeeping
Imports::session($model); Imports::batch($id);
Imports::read($request->file('file'));
Imports::sweep(); Imports::prune();Celý proces od začiatku do konca:
$session = Imports::for($team)->by($user)->upload('assets', $request->file('file')); // checked + stored
$session->suggestMapping(); // MappingSuggestion (applied already when complete)
$session->map(['Inventory no' => 'asset_tag', 'Name' => 'name']) // optional: by header text or column number
->saveMapping('ERP export'); // optional: reused for identical headers
$session->mode(DuplicateMode::Update)->preview(); // ≤ 500 rows: now; more: queued (poll isPreviewed())
$session->counts(); // ImportCounts
$session->rows(RowFilter::invalid())->paginate(50);
$batch = $session->commit(); // a Laravel job batch
$batch->progress();
$batch->summary();
$batch->rollback(); // within imports.undo.windowMetódy manažéra
| Metóda | Vracia | Čo robí |
|---|---|---|
for(Model $owner) | OwnerImports | Vstupný bod v rámci vlastníka — nahrávanie, relácie, dávky, uložené mapovania. HTTP kód používa len tento. |
importers() | Accessors\Importers | all(), find(), has(), describe(), available() — zisťovanie pre UI. |
register(string ...$classes) | void | Registrácia za behu popri imports.importers. |
importer(string $key) | ImporterHandle | descriptor(), template(), modes() — pri neznámom kľúči UnknownImporterException. |
template(string $importer, ?TemplateFormat $format = null, ?string $locale = null) | Template | Šablóna CSV alebo XLSX; formát predvolene podľa imports.templates.default_format. |
session(ImportSession|int|string $session) | SessionHandle | Dôveryhodná cesta bez kontroly vlastníka — ak chýba, ImportNotFoundException. |
batch(ImportBatch|int|string $batch) | BatchHandle | To isté pre dávku. |
read(ImportSource|UploadedFile|string $file, string|int|null $sheet = null, ?string $delimiter = null, int $headerRow = 1) | SpreadsheetFile | Samostatná čítačka — bez relácie, nič sa neukladá. |
prune() · sweep() | PruneReport · SweepReport | To, čo spúšťajú imports:prune a imports:sweep. |
Imports::fake() | ImportsFake | Len na fasáde — nahrávací fake (pozrite Testovanie). |
container() a perform() sú na manažéri verejné, ale interné — perform() je lievik, cez ktorý každý handle spúšťa svoju akciu, a háčik, cez ktorý zaznamenáva fake. Z kódu aplikácie ich nevolajte.
Imports::for($owner)
| Metóda | Vracia | Čo robí |
|---|---|---|
by(Authenticatable|Model|null $actor) | OwnerImports | Kópia konajúca ako $actor — LogicException, ak nejde o Eloquent model. |
upload(string $importer, ImportSource|UploadedFile|string $file, string|int|null $sheet = null, ?string $delimiter = null, int $headerRow = 1, ?string $locale = null) | SessionHandle | Skontroluje, uloží a otvorí reláciu. authorize(Upload) beží skôr, než sa súbor prečíta. |
uploadFiles(string $importer, iterable<UploadedFile>|UploadedFile $files, ?string $locale = null) | SessionHandle | Dávka súborov: viac súborov alebo archívov ZIP. |
sessions(?string $importer = null, SessionStatus ...$status) | Builder<ImportSession> | Najnovšie prvé — jeden importér (odmietne sa, ak ho aktér nesmie vidieť) alebo všetky, ktoré aktér smie vidieť. |
session(int|string $id) · batch(int|string $id) | SessionHandle · BatchHandle | Id iného vlastníka je ImportNotFoundException (404). |
mappings(string $importer) | SavedMappingsHandle | all(), find(), save(), delete(). |
running(string $importer) | ?SessionHandle | Relácia, ktorá sa práve importuje alebo vracia. |
$sheet je názov (presne, potom bez ohľadu na veľkosť písmen) alebo poradie od 1 medzi viditeľnými hárkami; $headerRow sa číta od 1; $locale je jazyk relácie — popisy, správy a desatinný oddeľovač.
Handle relácie
Metódy, ktoré niečo menia, vracajú handle, takže sa dajú reťaziť. Čítanie sa pýta na authorize(View) raz za handle; zápisy na vlastnú operáciu. Zmena zdroja, mapovania a režimu, náhľad aj zahodenie sa odmietnu výnimkou ImportStateException, keď reláciu drží import:
| Metóda | Vracia | Čo robí |
|---|---|---|
by($actor) · model() · id() | SessionHandle · ImportSession · int|string | Kópia konajúca ako $actor; jednoduché prístupové metódy. |
status() | SessionStatus | Znovu načítané z databázy — View. |
isValidating() · isPreviewed() · isCommitted() | bool | Committed = importuje sa alebo akýkoľvek neskorší stav — View. |
sheets() · headers() | list<SheetInfo> · list<string> | Prázdna hlavička sa číta ako Column C — View. |
useSheet($sheet) · useDelimiter($delimiter) · useHeaderRow($row) | self | Zmení spôsob čítania uloženého súboru; náhľad sa zahodí — Upload. |
suggestMapping() | MappingSuggestion | View. |
map(array|ColumnMapping $mapping) · saveMapping(string $name) | self | Upload. |
mode(DuplicateMode $mode) | self | Upload. |
preview(?bool $queue = null) | self | null: priamo do preview.sync_threshold, inak vo fronte; true / false to vynúti — Upload. |
counts() · previewData() · progress() | ImportCounts · ImportPreview · Progress | progress() má fázu preview, alebo fázu dávky počas importu — View. |
rows(?RowFilter $filter = null) | RowQuery | paginate(), cursor(), count() — View. |
errorReport(TemplateFormat $format = TemplateFormat::Xlsx, ?string $locale = null) | Template | Chybné riadky a stĺpec Errors — View. |
commit() | BatchHandle | Commit. |
cancel() | self | Zruší bežiacu dávku, ak existuje — Commit. |
discard() | self | Zmaže súbor a výsledky riadkov — Upload. |
batch() | ?BatchHandle | View. |
Handle dávky
| Metóda | Vracia | Čo robí |
|---|---|---|
by($actor) · model() · id() | BatchHandle · ImportBatch · int|string | Kópia konajúca ako $actor; jednoduché prístupové metódy. |
session() | SessionHandle | View. |
status() | BatchStatus | Znovu načítané — View. |
isRunning() · isFinished() · isRolledBack() | bool | pending/running · completed/failed/cancelled · vrátené — View. |
progress() | Progress | Fáza commit (časti) alebo rollback (vytvorené záznamy) — View. |
summary() | ImportSummary | View. |
records(?RecordAction $action = null) | Builder<ImportedRecord> | Riadky evidencie zoradené podľa čísla riadka — View. |
cancel() · resume() | self | Commit. |
rollback() | self | Rollback. |
canRollback() | bool | Completed/failed/cancelled, zatiaľ bez vrátenia alebo so zlyhaným, pred undo_until — View. |
rollbackReport() | ?RollbackReport | Keď sa vrátenie dokončilo alebo zlyhalo — View. |
Importéry, šablóny a uložené mapovania
- Imports::importers() — all() (každá ImportDefinition), find($key), has($key), describe($key, ?$locale), available(?$user, $owner, ?$locale).
- Imports::importer($key) — descriptor(?$locale), template(?$format, ?$locale), modes() (prázdne pri importéri súborov).
- Template — vlastnosti format a filename; download(?$filename), store($disk, $path), toTemporaryFile(?$target), contents().
- Imports::for($owner)->mappings($importer) — all(), find($name), save($name, $columns), delete($name).
- RowQuery ($session->rows($filter)) — paginate($perPage = 50, ?$page), cursor(), count().
Hodnotové objekty, DTO a enumy
- Definície (Definition\): Field, NaturalKey, Ownership, ChangeDetection, FileRules, FileDuplicates, Limits, FieldChange. Argumenty callbackov (Rows\): ImportRow, ImportContext, ImportFile. Čítanie (Reading\): SpreadsheetFile, Cell, ReadOptions.
- DTO (final readonly): ImportSource, UploadData, UploadFilesData, SaveMappingData, ColumnMapping, MappedColumn, MappingSuggestion, SuggestedColumn, SavedMapping, SheetInfo, ImportCounts, ImportPreview, RowFilter, RowResult, CellError, RecordReference, Progress, ImportSummary, RollbackReport, ImportedRecordView, ImportAudit, FileReference, ImporterDescriptor, FieldDescriptor, OptionDescriptor, PruneReport, SweepReport, DoctorFinding.
- Modely (vymeniteľné cez imports.models.*): ImportSession, ImportBatch, ImportRowResult, ImportedRecord. ImportSession a ImportBatch majú handle() a countOf(string $key) — jeden uložený počet (valid, creates, created, …), 0, ak chýba; statické ImportSession::count() je počet riadkov z Eloquentu.
- Enumy majú reťazcové hodnoty, používajú pomocníkov z enums-for-laravel (label(), labels(), options(), values(), fromLabel(), is(), …) a ich popisy sú preložené do angličtiny a slovenčiny:
| Enum | Hodnoty |
|---|---|
SessionStatus | uploaded, needs_mapping, mapped, validating, previewed, preview_failed, committing, completed, failed, cancelled, rolling_back, rolled_back, rollback_failed, discarded, expired — plus ::beforeCommit(), ::undoable(), isBeforeCommit() |
BatchStatus | pending, running, completed, failed, cancelled |
RollbackStatus | rolling_back, rolled_back, rollback_failed |
RowStatus · RowOutcome | valid, invalid, duplicate_in_file, matched, failed · create, update, skip |
RecordAction | created, linked, updated |
RollbackOutcome | deleted, handled, kept, kept_changed, missing, failed |
DuplicateMode | skip, update, create_new |
ImportOperation | view, upload, commit, rollback |
ImportKind | rows, files |
FieldType | text, integer, decimal, boolean, date, datetime, email, choice, reference |
SourceFormat · TemplateFormat | csv, xlsx |
CellType | text, number, boolean, date, error |
MappingSource | saved, name, label, alias, fuzzy, manual, suggested |
DelimiterSource | sniffed, hint (sep=), override |
RejectionReason | 27 hodnôt — pozrite Čítanie súborov |
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 kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
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.