Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

generate-fixtures output is unreadable as a maintained fixture

Chiusa
#452 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
php
Ambito
tooling

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

enhancement

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:

  1. 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.
  2. References are written far from their component. Every non-component association (e.g. a navigation link's route) is deferred to an afterRoutes() 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').
  3. HTML on one line. exportValue() uses var_export(), so rich HTML becomes a single quoted string. The longest line in the snapshot is 12,963 characters.
  4. 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.
  5. 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.
  6. Lists written with index keys. uiClassNames and other plain lists come out as [0 => '...'].
Requested
  1. 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. $aboutTeamLink or $homeHeroGroup, with a numeric suffix only to resolve clashes. Don't create a variable at all for components nothing refers to later.
  2. 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. Keep afterRoutes() for draft components only.
  3. 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>.html and load it with file_get_contents(__DIR__ . '/assets/html/<name>.html').
  4. Timestamps opt-in. By default, emit a single "published" call per component (e.g. $cwa->publish($x), published at load time) instead of the exact publishedAt. Add --keep-timestamps for exact copies.
  5. 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 from build(), keeping nested children inside their parent's method.
  6. Plain lists. Use array_is_list() in exportValue() 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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di components-web-app/api-components-bundle

Tutte le issue di components-web-app/api-components-bundle

Issue simili

Altre issue su PHP

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.