generate-fixtures output is unreadable as a maintained fixture
Los mantenedores suelen responder en 1 día
Ya se ha fusionado un pull request relacionado.
- #453 de @silverbackdan — fusionado
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- PHP
- Estrellas
- 32
- Forks
- 8
- Merge medio
- 1 h 1 min
- PR fusionados (30 d)
- 159
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de components-web-app/api-components-bundle
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
components-web-app/api-components-bundle#504 · 22 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
components-web-app/api-components-bundle#333 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
components-web-app/api-components-bundle#325 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 52/100
components-web-app/api-components-bundle#259 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
components-web-app/api-components-bundle#186 ·
Los mantenedores suelen responder en 1 día
Todos los issues de components-web-app/api-components-bundle
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
nextcloud/integration_openai#446 ·
-
bug customer-reported
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
MagnaCapax/PMSS#1101 ·
Los mantenedores suelen responder en 5 días
-
InvoiceSettled is answered 200 when the invoice cannot be re-fetched, so BTCPay never redelivers itAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
btcpayserver/woocommerce-greenfield-plugin#93 ·
Los mantenedores suelen responder en 1 día
-
kind/bug status/triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100