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.
Architecture fit
#[Fillable], #[Appends], #[Table]) and schema-driven relations. Release 2.5.1 also confirms it generates frontend artifacts (Show.vue, Listing.vue), so its footprint spans backend codegen and generated Vue components, but still sits in the development/build lane.Show.vue change — wysiwyg columns (perex, text, body, description) rendering via v-html instead of escaped text — is the most architecturally significant change. It shifts generated frontend components from “safe-by-default escaped output” to “trusts stored rich text.” The security boundary moves to data sanitization at write time and/or a sanitization step before rendering.Integration feasibility
v-html rendering in Show.vue, factory states using array arguments to state() instead of closures, and a comment removal in Listing.vue.v-html change is a regeneration-time behavior change. Existing generated components stay escaped until regenerated, so adoption can be staged. However, once regenerated, any wysiwyg column content is inserted as HTML. That requires an explicit XSS review, not just a diff accept.unverified(), two-factor, password states passing an array to state() instead of a closure) is likely behaviorally equivalent for static state definitions. The risk is low but non-zero: if a generated state relied on closure semantics for dynamic evaluation, array-based state may not preserve that behavior.Listing.vue comment removal is pure diff noise.is_published() → isPublished()) and stricter pivot detection still apply to teams upgrading from below 2.4.0.Technical risk
v-html bypasses Vue’s default escaping. If any wysiwyg column contains user-supplied or untrusted HTML, generated Show.vue can render it directly. This is a security-sensitive generated-output change shipped in a minor release. Mitigation requires a sanitization policy (e.g. server-side HTML sanitization on write, or client-side sanitization before v-html) and functional review of affected screens.Show.vue and Listing.vue changes confirm that published generator templates can diverge from upstream. If we override Vue stubs, we may silently miss the v-html change — or, conversely, keep escaping where upstream now renders HTML. Either way, stale overrides need detection.unverified(), two-factor, and password states behave identically for our test setup. Static states should be fine; dynamic state definitions may need review.belongsToMany to hasMany/belongsTo without a type error. Still requires explicit relation diff review.phpcs:ignore comments, whitespace cleanup, and the Listing.vue comment removal will churn regenerated files. Commit regeneration as an isolated, review-only diff.Key questions
#[Table], #[Fillable], #[Appends]) provided by this package or by a peer dependency we must version-lock alongside it?Show.vue and Listing.vue? If so, does the v-html change require re-publishing, and how do we detect that an override has gone stale?v-html, or does it assume content is sanitized upstream? Is v-html rendering configurable per column or globally?snake_case method names during a transition?require-dev dependency, and is any generator artifact loaded in production paths (e.g. factories used by seeders, generated Vue components shipped to production)?Stack fit
v-html.Migration path
2.5.1) before regeneration; do not float ^2.x while generated output is in flux.Show.vue consumers rendering wysiwyg columns (perex, text, body, description) — review XSS posture; (b) user factories with unverified(), two-factor, and password states — verify array-based state() behavior; (c) if upgrading from below 2.4.0, snake_case boolean factory states and two-FK pivot candidates.Show.vue output. Add or confirm HTML sanitization for wysiwyg content before accepting v-html.v-html change is undesired.Compatibility
v-html change is regeneration-time only. Existing components remain escaped until regenerated, so teams can defer or stage the change.v-html becomes configurable or whether the factory states revert to closures.Sequencing
v-html security posture → (4) roll forward module by module → (5) add a CI guard that regenerated output matches committed output, so future drift is caught at PR time rather than at upgrade time.Maintenance
v-html. That is a new recurring maintenance task, but still bounded to regeneration events.AGENTS.md / CLAUDE.md and added tests for relation detection, factory, and model generation improve our ability to use coding agents on this package. Snapshot regeneration helps catch upstream regressions before they reach us.Support
Scaling
Failure modes
v-html (high, new): regenerated Show.vue renders wysiwyg columns as raw HTML. If content is untrusted and unsanitized, this is a stored-XSS path. Mitigated only by explicit sanitization and frontend security review.Show.vue/Listing.vue overrides may silently omit or contradict the v-html change, producing inconsistent rendering or missed security behavior.belongsToMany becomes hasMany/belongsTo and queries return different result shapes without a type error. Mitigated only by explicit relation diff review and functional tests.#[Table] (low, from 2.4.0): resolved in 2.4.0; only relevant if pinned below it and using non-conventional table names.Ramp-up
v-html.Show.vue renders wysiwyg columns as HTML — confirm sanitization before regeneration; (2) boolean factory states are camelCase for multi-word columns from 2.4.0 onward; (3) any two-FK table may change relation type on regeneration; (4) never hand-edit a generated PHP or Vue file expecting it to survive regeneration.How can I help you explore Laravel packages today?