generate-fixtures output is unreadable as a maintained fixture
I maintainer di solito rispondono entro 1 giorno
Una pull request collegata è già stata integrata.
- #453 di @silverbackdan — integrata
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start in GenerateFixturesCommand, reading emitComponent(), emitGroup(), exportValue(), build() and the $deferredReferences / afterRoutes() handling. Generate a fixture from a small site and compare it with the output. Done when the generated class has readable variable names, inline references, nowdoc HTML, opt-in timestamps and per-page methods, and still reloads to the same rows.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
silverback:api-components:generate-fixtures (2.0.0-alpha.18) reproduces a site faithfully. A snapshot of a production site with 18 pages, 66 groups, 119 components and 13 images reloads with every content row matching. But the class it writes can't be maintained as a fixture: a developer opening it found it unreadable. The causes are all in GenerateFixturesCommand:
- Positional variables. Every component is
$c[n]and every group$g[n], numbered in walk order (emitComponent(),emitGroup()).$c[35]->html = ...says nothing about what it is. - References are written far from their component. Every non-component association (e.g. a navigation link's
route) is deferred to anafterRoutes()block at the end of the file ($deferredReferences). A link is created on line 35 and given its route 600 lines later as$c[3]->route = $cwa->getRoute('/about/team'). - HTML on one line.
exportValue()usesvar_export(), so rich HTML becomes a single quoted string. The longest line in the snapshot is 12,963 characters. - Timestamps on everything. Every publishable component gets
setPublishedAt(new \DateTime('2026-10-02T14:48:09.000000+00:00')): 81 of them in a 649-line file. - No structure.
build()is a single flat method, with no marker where each page starts, and the layout's groups are written before any page. - Lists written with index keys.
uiClassNamesand other plain lists come out as[0 => '...'].
Requested
- Readable variable names. Derive them from the short class name plus an identifying value (label, title, reference or the owning page's reference), e.g.
$aboutTeamLinkor$homeHeroGroup, with a numeric suffix only to resolve clashes. Don't create a variable at all for components nothing refers to later. - Set references inline.
afterRoutes()exists only because the target route isn't built yet. A lazy builder reference resolved on flush (e.g.$cwa->routeRef('about-team')) would let the generator write$link->route = $cwa->routeRef('about-team')next to the link. KeepafterRoutes()for draft components only. - Readable HTML. Emit long HTML as a nowdoc with a line break after each block-level closing tag. Alternatively, add an option to write each one to
assets/html/<name>.htmland load it withfile_get_contents(__DIR__ . '/assets/html/<name>.html'). - Timestamps opt-in. By default, emit a single "published" call per component (e.g.
$cwa->publish($x), published at load time) instead of the exactpublishedAt. Add--keep-timestampsfor exact copies. - Structure. At minimum, write a comment header for each layout and page, e.g.
// Page: About - Team (/about/team). Better: one private method per layout and top-level page, called frombuild(), keeping nested children inside their parent's method. - Plain lists. Use
array_is_list()inexportValue()so lists are written as['a', 'b'].
The expected result: running generate-fixtures against a live site gives a class a developer can read, edit and review in a diff as easily as a hand-written AbstractCwaScaffold, while still reloading to the same rows.
- Lingua principale
- PHP
- Stelle
- 32
- Fork
- 8
- Merge medio
- 1h 1m
- PR unite (30g)
- 159
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di components-web-app/api-components-bundle
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
components-web-app/api-components-bundle#504 · 22 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
components-web-app/api-components-bundle#333 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
components-web-app/api-components-bundle#325 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
components-web-app/api-components-bundle#259 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
components-web-app/api-components-bundle#186 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di components-web-app/api-components-bundle
Issue simili
-
ObjectMapper
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
symfony/symfony-docs#23390 ·
I maintainer di solito rispondono entro 2 giorni
-
sync-en
Difficoltà 1/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno
-
sync-en
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 83/100
I maintainer di solito rispondono entro 3 giorni
-
Перевод устарел
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno