NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Workflows for Laravel

Validácia pri publikovaní

$report = Workflows::definition('purchase-approval', $team)->validate();          // the draft
$report = Workflows::versions()->validate($graph, 'purchase_request', $team);     // any graph
$report->valid();          // no errors (warnings don't block)
$report->errors;           // list<ValidationError>
$report->errorsOnly();     // and ->warnings()
$report->find(ValidationCode::UnknownField, 'check');
$report->has(ValidationCode::UnknownField, 'check');
$report->toArray();

ValidationError{code: ValidationCode, severity: error|warning, message (preložená), node: ?string, edge: ?{from, to, outcome}, path: ?string (JSON pointer), params: array}. Správy nikdy neobsahujú názov triedy. publish() spustí úplnú validáciu pod zámkom definície a pri chybách vyhodí InvalidGraphException (s reportom); jej správa uvedie prvé problémy. Uloženie konceptu kontroluje len štruktúru:

use RoundlyConsulting\Workflows\Exceptions\InvalidGraphException;

try {
    Workflows::definition('purchase-approval', $team)->publish(by: $admin);
} catch (InvalidGraphException $e) {
    $e->validationReport()->toArray();   // [{code, severity, message, node, edge, path, params}, …]
}

Prechody

Spustia sa všetky prechody a zbierajú chyby; predčasne skončí len štrukturálne zlyhanie:

  • Štruktúra: verzia schémy, tvar uzlov a hrán, vzor id, duplicitné id, visiace hrany, stropy veľkosti.
  • Katalóg: známe typy uzlov; prepojený typ, ktorého balík chýba → adapter_missing s params.package.
  • Konfigurácia: JSON schéma typu (invalid_config + path), potom jeho sémantické kontroly, potom bloky eskalácií.
  • Spúšťač a koniec: presne jeden spúšťač, aspoň jeden koniec, žiadna hrana do spúšťača ani z uzla end.
  • Výsledky: každý povinný výsledok má práve jednu hranu; žiadne neznáme ani duplicitné výsledky.
  • Dosiahnuteľnosť: každý uzol je dosiahnuteľný zo spúšťača.
  • Cykly: po odstránení strážených hrán — hrany continue uzla loop a výstupu z delay s kladným for — nezostane žiadny cyklus.
  • Polia a odkazy: cesty k poliam, operátory, typy hodnôt, zapisovateľnosť, vstupy, odkazy na predchodcov, určenie vlastníka subjektu.
  • Aktér: on_behalf_of potrebuje spúšťač s používateľom.
  • Príznaky z importu: nevyriešené príznaky na kontrolu zo šablóny.
  • Naprieč definíciami: ciele start_workflow pre vlastníka existujú, majú ručný spúšťač a dostanú povinné vstupy; statické spustenie seba samého bez wait: false je varovanie.

Kódy

KódVýznam
invalid_schema_versionschema nie je roundly.workflows.graph/v1
invalid_structureTvar dokumentu je nesprávny
invalid_node_idId porušuje ^[a-z][a-z0-9_]{0,63}$ (správa nikdy nezopakuje odoslané id)
duplicate_nodeDva uzly majú rovnaké id
dangling_edgeHrana ukazuje na neznámy uzol
graph_too_largePrekročený strop veľkosti
unknown_node_typeŽiadny typ kroku s týmto kľúčom
adapter_missingTyp potrebuje balík, ktorý nie je nainštalovaný
invalid_configKonfigurácia porušuje schému alebo pravidlá typu
trigger_countNie je presne jeden spúšťač
no_endChýba uzol end
trigger_has_incomingDo spúšťača vedie hrana
end_has_outgoingZ uzla end vychádza hrana
missing_outcomePovinný výsledok nemá hranu
unknown_outcomeHrana uvádza výsledok, ktorý typ nemá
duplicate_outcomeDve hrany pre jednu dvojicu (from, outcome)
outcome_label_requiredHrana bez výsledku z uzla, ktorého výsledky nie sú len next (params: outcome, výsledky typu)
unreachable_nodeUzol nie je dosiahnuteľný zo spúšťača
cycle_without_breakerCyklus neprechádza hranou continue uzla loop ani oneskorením s kladným for (params.nodes)
unknown_fieldCesta k poľu nie je registrovaná
operator_not_allowedOperátor sa nehodí k typu poľa
invalid_valueLiterál nesprávneho typu
unknown_inputinput.* nie je deklarovaný
invalid_referencesteps.<id> nie je predchodca
field_not_writableset_field na poli, ktoré nie je zapisovateľné alebo je stavom lifecycle
subject_owner_unresolvableDefinícia s vlastníkom nad typom subjektu bez určenia vlastníka
unknown_subject_typeTyp subjektu definície nie je registrovaný
actor_requires_useron_behalf_of so spúšťačom schedule alebo webhook
unresolved_import_referencePríznak na kontrolu zo šablóny je stále otvorený
unknown_definitionCieľ start_workflow pre vlastníka neexistuje
child_trigger_not_manualCieľ start_workflow nemá ručný spúšťač
missing_child_inputPovinný vstup dieťaťa nie je namapovaný
self_startVarovanie: definícia spúšťa samu seba
unknown_calendarNázov kalendára pre vlastníka nie je známy
roles_unavailableStrana typu role bez vyhodnocovania rolí
invalid_cronCron výraz, ktorý parser odmietne (params.token)
condition_too_complexPríliš hlboká alebo s priveľa klauzulami
unknown_transitionPrepojenie s lifecycle: taký prechod neexistuje
unknown_notification_typePrepojenie s notifications: taký typ neexistuje
unknown_formSpúšťač s formulárom uvádza formulár, ktorý forms-for-laravel nemá (bez nainštalovaného forms: adapter_missing)

Vstup z prehliadača je nedôveryhodný: validácia aj uloženie konceptu odpovedia na akýkoľvek dokument — nesprávne typy na každej úrovni, hlboké vnorenie, obrovské reťazce — cez ValidationReport alebo InvalidGraphException, nikdy TypeError, a žiadna chybová správa nezopakuje odoslanú hodnotu.

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

Odoslaní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.