dejwcake/admin-generator
dejwcake/admin-generator is a Laravel package for scaffolding admin panels and CRUD interfaces, helping developers quickly generate management screens, forms, and tables for application models to speed up backend development.
Show.vue, Listing.vue). 2.5.1 confirms the output surface extends into our admin front end. The decision this informs is whether we own hand-rolled Laravel boilerplate and hand-rolled admin CRUD views, or adopt a generator plus its output conventions. Ownership cost shifts from "maintain templates" to "regenerate, diff, review" — but the review now covers presentation and escaping behavior, not just PHP.Show.vue now renders wysiwyg columns (perex, text, body, description) with v-html instead of escaped text. That is the correct behavior for rich text, and it moves the escaping boundary: sanitization must happen where the content enters (server-side, at write time) or in a shared component. PM call: before regenerating views in any domain that stores user-authored content in those columns, confirm a sanitization policy exists. This is a security-reviewable change, not just a cosmetic one — treat it as a gated rollout item.is_published now yields isPublished() / isNotPublished() instead of is_published() / notIsPublished(); single-word columns are unchanged (enabled() / notEnabled()). Already-generated code is untouched, so this remains opt-in-by-regeneration. PM call: regenerate per domain behind review, not big-bang, and budget test/seed updates for any suite calling the old snake_case states. Sequence this after the sanitization question above if the same domains have wysiwyg columns.belongsToMany when it holds just its two foreign keys (plus optional id and timestamps). Entity tables that merely reference two other tables are no longer collapsed into pivots. This directly affects what our generated model claims about the schema — relevant to reporting joins, nested resource endpoints, and anything that consumed those relations.#[Table(name: '...')] was being HTML-escaped, producing invalid PHP for non-conventional table names. Fixed in 2.4.0, and pivot table names/keys are read from detected schema rather than derived from convention. This widens the addressable use case from "greenfield, convention-compliant" to "existing schema."unverified(), two-factor, and password states now pass an array to state() instead of a closure, and a stale comment was removed from Listing.vue. No public surface change, no consumer action beyond regeneration. Useful mainly as a signal that factory internals are being tidied incrementally — no decision required.AGENTS.md / CLAUDE.md and $view-based template resolution in request and permission generators suggest the project is positioned for AI-assisted contribution and template customization — worth noting if we plan to fork or override templates, especially now that view templates are in scope.Adopt when:
#[Table], #[Fillable], #[Appends]) — the generator targets that style; on older versions the output won't match house conventions.#[Table] escaping fix are what make those safe.v-html output in generated Show.vue is safe by construction.Look elsewhere or wait when:
is_published() breaks. If factory coverage is thin or the codebase is large, pin to 2.3.x until a controlled sweep is scheduled.text/body/description/perex and have no sanitization layer. Regenerating Show.vue on 2.5.1 would turn a latent data-quality issue into a live XSS surface in internal admin tooling. Fix the sanitization path first, then regenerate.Show.vue / Listing.vue means maintaining a fork of a template that is actively changing; if the design system diverges far from generated output, the front-end half of this package becomes a liability rather than a saving.Executives: This is a developer-productivity dependency that turns our database schema into Laravel models, factories, requests, permissions, and admin CRUD views. Release 2.4.0 was a quality release — it fixed generation of invalid PHP for non-standard table names and stopped misclassifying ordinary tables as many-to-many pivots, which was producing incorrect domain models. Release 2.5.1 is smaller: generated admin views now render rich-text columns as formatted HTML rather than escaped markup, which is what editors expect but requires us to confirm our content sanitization before regenerating those views. There is one controlled migration cost carried over from 2.4.0 — regenerated factories rename boolean helper methods to camelCase — so we regenerate per domain with tests updated alongside rather than all at once. Nothing breaks on upgrade: existing generated files are untouched until we choose to regenerate.
Engineering: Upgrade is safe at install time; existing generated code is not modified. Treat regeneration as a reviewed change: pin the version, regenerate into a branch, diff output. Expect factory states to move from is_published() / isNotPublished() to isPublished() / isNotPublished() (single-word columns unchanged), and note generated closures are now static fn (): array without phpcs:ignore, so coding-standard configs may need a look. Pivot detection is FK-only (plus optional id/timestamps) with names and keys read from the schema, #[Table] is emitted after #[Fillable] (after #[Appends] on admin users), and the double-blank-line issue between consecutive generated hasMany methods is fixed. In 2.5.1 specifically: Show.vue renders perex, text, body, and description via v-html — confirm server-side sanitization for those columns before regenerating any view that displays user-authored content, and prefer an allowlist sanitizer over trusting the column name; user factory unverified(), two-factor, and password states now pass an array to state() rather than a closure (no external behavior change); and a stale comment above useResponsiveColumns() in Listing.vue was removed. Snapshots were regenerated and relation/factory/model generation gained new tests, so the diff surface is well covered.
How can I help you explore Laravel packages today?