Edit settings in the administration
Enable Editor mode in its own dropdown beside the administration language switch. The dropdown also opens every setting of the model you are looking at. The switch is available only to a signed-in administrator with full access (hasAdminAccess()) with APP_DEBUG=true outside the production environment. The server applies the same restrictions to reads and writes. With roles enabled, full access requires permissions = true; with roles disabled, CrudAdmin administrators already have full access.
Pencils beside form headings, table headers, buttons, filters and the column picker open a shared settings modal. Their tooltips show the setting keys. A button pencil opens all three button texts: opening a new form, submitting a new record and saving an existing record. The pencil beside the table heading opens all editable settings for that model. Every modal edits only the settings its pencil covers. Edits render in the administration immediately; closing the modal without saving restores the stored settings.
The initial editable set is increments, filter.single, filter.max_buttons, title.create, title.update, buttons.create, buttons.insert, buttons.update, columns.*.name, columns.*.hidden, and the default column snapshot. Other settings remain in PHP. The editor uses a shared registry for field types, group titles and server validation; fields are grouped by their prefix into the same cards the administration uses for field groups, and an empty field shows the value the administration renders in its place as the placeholder.
Changes are written to app/Admin/model-settings.php, keyed by the full model class. Commit and deploy this file with your application. It contains the current configuration only, not a change history. Existing model settings and mutators remain supported; the map overrides their values. Restore original setting removes an override.
app/Admin/model-settings.php
_('text'), and app/Admin is included in administration gettext extraction. Placeholders such as :name and :id remain supported.
The map is independent of bootstrap/cache/crudadmin.php: admin:cache never overwrites it, and settings are translated at runtime. Conflicting concurrent edits are rejected; reopen the editor to load the current file before saving again.
Default columns
In editor mode, arrange and toggle columns in the column dropdown, then choose Use as default. This saves both their order and visibility for the model, including nested tables. A snapshot can overridehidden; it cannot expose password or inaccessible columns. Clear default removes the snapshot and restores the model defaults.
Existing personal column preferences remain above the shared defaults. When the developer changes table settings, the open model previews the new defaults. Newly introduced columns are inserted after their nearest predecessor from the current model definition and use that definition’s visibility. Removed fields are ignored; migrated virtual columns are retained explicitly.
Use snapshots for new ordering configuration. Legacy columns.*.before and columns.*.after declarations remain readable for compatibility and can be converted by admin:settings-migrate.
Defining settings
Settings control texts, the table, the grid, search and form behaviour of a module. Define them in the$settings property, or in the settings() method when values depend on runtime conditions.
app/Models/Order.php
app/Models/Product.php
settings() method exists, the $settings property is ignored. The method is evaluated on every request of the administration, so it can read config, the logged administrator or the request.
Settings can be written as nested arrays or with dot keys. Both forms produce the same result and can be mixed. When the same path is declared twice, the later value wins.
setSettingsProperty mutator:
title.*, buttons.* and columns.*.name are translated with gettext, so write them in the source language of the administration.
Most settings only change the administration interface, they do not restrict the server.
'editable' => false makes the form read-only, but updates are still accepted. Use the $editable parameter to forbid them.Form texts
app/Models/Client.php
Every
:column placeholder in title.update is replaced by the value of the opened record. Values of select and radio fields are replaced by the option label, translatable values by the first language.
Set 'buttons.create' => false to hide the add button.
Columns
app/Models/Product.php
Use
columns.*.name to customize column headers, for example columns.price.name.
Adding new columns
A column which is not a field adds a new column to the table. Its value is added bysetAdminAttributes or loaded in scopeAdminRows.
'encode' => falserenders the value as HTML and disables the text limit.componentrenders the cell with a Vue component from the component directories. The component receives thevalue,valueMutated,valueLimited,field,rowandmodelprops. Unknown component names are ignored.'hidden' => trueor'invisible' => trueadds the column turned off,'column_visible' => trueforces it on.
Table and grid
app/Models/StockMovement.php
Grid
The grid defines how the table and the form share the screen:small, big, half (alias medium) and full.
A list of sizes can be written as
'grid' => ['half', 'full'] only when no other grid.* key is set. Together with grid.default use the grids key.Search, filters and pagination
getFilterStates(), which fills filter.items automatically. 'filter.enabled' => false hides them.
Form behaviour
app/Models/Booking.php
File fields in the form
canDownload/canDeletehide the download link and the remove button of an uploaded file.optionsare passed as props to the select component of the field.
Primary key
The administration reads the primary key name from Eloquent’sgetKeyName(). Use the standard model property instead of a separate setting:
id. This property identifies the model’s actual database key; it is not an alternative display column. For a non-incrementing string key, also configure $incrementing = false and $keyType = 'string' on the model.