NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #1973 most downloaded on Packagist
The missing Symfony Admin Generator
Last release 3 months ago
03 Jun 2026
Release timing varies
gaps range from 1 weeks to 5 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
277 releases · first in 2013
[#7823] Support for abstract class subject in RetrieveAutocompleteItemsAction. (@Geekimo)
^3.6 (@jordisala1991)sonata-project/form-extensions. (@jordisala1991)One column per quarter.
[#7803] Fix vulnerabilities on several frontend dependencies by upgrading them: async, minimist, ansi-regex and moment, (@jordisala1991)
async, minimist, ansi-regex and moment, (@jordisala1991)[#7792] In preparation for SonataBlockBundle 5.0 we are not rendering block responses as private anymore (@dmaicher)
[#7781] Correctly set the parent object in AdminType with CollectionType passed by reference (@VincentLanglet)
[#7761] CrudController::handleModelManagerThrowable can now return a custom error message to display in the flashbag instead of the generic one from S
[#7744] Some typehint from SourceIteratorInterface to \Iterator to allow using this library without deprecation (@VincentLanglet)
TemplateType to display custom data in the edit/create view. (@VincentLanglet)make:sonata:admin command, now it's passing modelClass and Controller in services tag. (@eerison)getListModes method. (@VincentLanglet)sonata_admin.options.default_label_catalogue in favor of sonata_admin.options.default_translation_domain (@VincentLanglet)label_catalogue attribute on sonata_admin tag in favor of translation_domain (@VincentLanglet)catalogue option on fieldDescription in favor of choice_translation_domain for TYPE_CHOICE or value_translation_domain for TYPE_TRANS. (@VincentLanglet)label_catalogue on group configuration in favor of translation_domain (@VincentLanglet)btn_catalogue option on form type in favor of btn_translation_domain (@VincentLanglet)admin key in an item of the sonata_admin.dashboard.groups config (@VincentLanglet)route or a label when an admin is passed in an item of the sonata_admin.dashboard.groups config (@VincentLanglet)item_adds key when configuring the sonata_admin.dashboard.groups config (@VincentLanglet)tree.html.twig template (@core23)translation_domain attribute on sonata_admin is used to set the admin translation domain. (Unlike the label_catalogue attribute) (@VincentLanglet)[#7716] Configure the admin with the sonata_admin tag before any custom call provided in the service configuration. (@VincentLanglet)
sonata_admin tag before any custom call provided in the service configuration. (@VincentLanglet)global_search for admin with non-default code. (@VincentLanglet)[#7684] code, model_class and controller attribute to the sonata.admin service tag (@VincentLanglet)
code, model_class and controller attribute to the sonata.admin service tag (@VincentLanglet)sonata.admin attributes instead. (@VincentLanglet)[#7685] Support for symfony/translation-contracts 3.x (@jordisala1991)
symfony/translation-contracts 3.x (@jordisala1991)AdminInterface::showInDashboard() method (@VincentLanglet)AdminInterface::showIn() method (@VincentLanglet)ModelsToArrayTransformer::reverseTransform() (@VincentLanglet)[#7669] Model_autocomplete_type template (@VincentLanglet)
[#7661] ModelAutocompleteType delay option (@Gasjki)
AdminInterface::isGranted() (@VincentLanglet)AbstractAdmin::isGranted() (@VincentLanglet)SecurityHandlerInterface::isGranted() (@VincentLanglet)RoleSecurityHandler::isGranted() (@VincentLanglet)AclSecurityHandler::isGranted() (@VincentLanglet)[#7647] DefaultRouteGenerator Routes generation for nested admins (@Devristo)
[#7622] Fixed PHP 8.1 deprecation notice for nl2br usage in base_show_field.html.twig. (@javer)
[#7617] The ability to not add a select column when accessing to the List with AJAX. (@VincentLanglet)
select column when accessing to the List with AJAX. (@VincentLanglet)src/Resources/views/CRUD/base_list_flat_field.html.twig (@VincentLanglet)src/Resources/views/CRUD/base_list_flat_inner_row.html.twig (@VincentLanglet)[#7608] Accessing a non existing template variable in list_footer block when the list_table block is overriden (@VincentLanglet)
[#7609] Model Autocomplete template (@VincentLanglet)
[#7579] Added AbstractAdminExtension::preBatchAction() and AdminExtensionInterface::preBatchAction() (as annotation for BC) to have an extension point
AbstractAdminExtension::preBatchAction() and AdminExtensionInterface::preBatchAction() (as annotation for BC) to have an extension point on batch actions. (@7ochem)AdminEventExtension::preBatchAction() that dispatches a sonata.admin.event.batch_action.pre_batch_action event with a BatchActionEvent object containing the data (@7ochem)ModelManagerThrowable (@VincentLanglet)CRUDController::handleModelManagerThrowable() (@VincentLanglet)FormTypeFieldExtension::getValueFromFieldDescription() (@VincentLanglet)CRUDController::handleModelManagerException() (@VincentLanglet)[#7599] French translations (@VincentLanglet)
[#7576] Missing merge call in twig (@VincentLanglet)
merge call in twig (@VincentLanglet)[#7561] Make AuditReaderInterface generic (@VincentLanglet)
AuditReaderInterface generic (@VincentLanglet)AbstractAdmin::removeExtension() (@VincentLanglet)select column when accessing to the list with AJAX (@VincentLanglet)psr/log 3.0. (@jordisala1991)psr/container 2.0. (@jordisala1991)[#7558] Added more generic information (@core23)
Sonata\AdminBundle\Builder\BuilderInterface (@VincentLanglet)[#7487] Deprecations triggered with Symfony 5.4 (@franmomu)
[#7464] New role ROLE_MYADMIN_HISTORY to access to the history actions (@VincentLanglet)
ROLE_MYADMIN_HISTORY to access to the history actions (@VincentLanglet)AdminInterface::removeFieldFromShowGroup method (@VincentLanglet)AbstractAdmin::removeFieldFromShowGroup method (@VincentLanglet)show. (@VincentLanglet)ListMapper::addIdentifier() is now show (@VincentLanglet)AbstractAdmin::getAccessMapping visibility (@VincentLanglet)AclSecurityHandlerInterface::addObjectClassAces() signature (@VincentLanglet)AclSecurityHandler::addObjectClassAces() signature (@VincentLanglet)AdminAclManipulator::addAdminClassAces() signature (@VincentLanglet)AdminAclManipulatorInterface::addAdminClassAces() signature (@VincentLanglet)CollectionType for nested fields. (@VincentLanglet)ShowMapper::remove method now correctly remove the field from the groups. (@VincentLanglet)AbstractAdmin::searchResultAction() (@VincentLanglet)AbstractAdmin::getSearchResultLink() (@VincentLanglet)AdminInterface::getSearchResultLink() (@VincentLanglet)ROLE_MYADMIN_EDIT (@VincentLanglet)AdminInterface::getAccessMapping method (@VincentLanglet)[#7449] Revision class (@VincentLanglet)
Revision class (@VincentLanglet)AuditReaderInterface::findRevision() return type (@VincentLanglet)elements. (@VincentLanglet)base_show_compare template (@VincentLanglet)AbstractAdmin::configureActionButtons() phpdoc for phpstan (@VincentLanglet)[#7364] FormMapper now implements the BlockBundle/FormMapper interface (@VincentLanglet)
FormMapper now implements the BlockBundle/FormMapper interface (@VincentLanglet)AdminInterface::getPersistentParameter() (@VincentLanglet)AdminInterface::getSubject() method (@franmomu)final keyword (@VincentLanglet)getPreviousFilter() non nullable (@VincentLanglet)isXmlHttpRequest(), redirectTo(), isPreviewApproved(), isInPreviewMode(), isPreviewDeclined(), validateCsrfToken() signatures. They now require to pass the request as first argument. (@VincentLanglet)SessionFilterPersister::__construct() from SessionInterface to RequestStack (@franmomu)select2 (@franmomu)keep_open option to always keep open a group menu (@franmomu)CRUDController::getRequest() method (@VincentLanglet)[#7131] Add Source Sans Pro font source files (@jordisala1991)
FilterData to model the data from a filter (@franmomu)src/Resources/public/images directory (@jordisala1991)app.js file (@jordisala1991)FilterInterface::apply() to accept a FilterData instance instead of array in argument 4 (@franmomu)app.js file (@jordisala1991)app.css file (@jordisala1991)src/Resources/public to assets directory. Only necessary assets are exposed to the public dir (@jordisala1991)app.css (@jordisala1991)jquery-form to v4 (@jordisala1991)jquery.scrollto to v2 (@jordisala1991)See UPGRADE-4.0.md
See UPGRADE-4.0.md
Nothing published for this version
[#7705] Catch AccessException in AbstractAdmin::appendParentObject() to prevent an error when the property for the parent object is uninitialised. (@7
[#7641] Fixed batch confirmation translations to include mentioning the selected action or object (@7ochem)
[#7602] ModelManagerThrowable (@VincentLanglet)
ModelManagerThrowable (@VincentLanglet)CRUDController::handleModelManagerThrowable() (@VincentLanglet)CRUDController::handleModelManagerException() (@VincentLanglet)[#7574] Missing merge call in twig (@VincentLanglet)
merge call in twig (@VincentLanglet)[#7563] AbstractAdmin::removeExtension() (@VincentLanglet)
AbstractAdmin::removeExtension() (@VincentLanglet)select column when accessing to the list with AJAX (@VincentLanglet)AbstractAdmin::getAccess() (@core23)ModelAutocompleteType with different order (@franmomu)[#7524] HTML icon rendering in the menu (@VincentLanglet)
[#7521] Correctly display the default icon in the admin menu if none are provided (@VincentLanglet)
[#7387] Do not throw error when trying to inject an admin as a service in an action. (@VincentLanglet)
[#7362] Deprecated using @ParamConverter annotation for injecting admin services (@franmomu)
psr/log ^2.0. (@jordisala1991)RetrieveAutocompleItemsAction when used with an array of property (@VincentLanglet)[#7325] Option list_action_button_content (@VincentLanglet)
list_action_button_content (@VincentLanglet)ROLE_* roles by the RoleSecurityHandler (@VincentLanglet)block twig in order to override the button display by the admin in the base_edit_form (@VincentLanglet)response_item_callback callback signature (@VincentLanglet)title_mode. Use logo_content instead (@VincentLanglet)admin in the request of search action (@VincentLanglet)translation_domain (@VincentLanglet)response_item_callback option of ModelAutocompleteFilter (@VincentLanglet)[#7285] Added deprecated annotation to AbstractAdmin validate() method. (@7ochem)
ChainableFilterInterface (@VincentLanglet)IconExtension twig extension. (@VincentLanglet)parse_icon filter. (@VincentLanglet)Symfony\Component\Form\FormRegistryInterface to AbstractFormContractor::__construct (@dmaicher)global_search option to a filter which does not implements SearchableFilterInterface. (@VincentLanglet)sonata_admin.global_search.case_sensitive configuration. (@VincentLanglet)AbstractAdmin::addParentAssociationMapping() method. (@VincentLanglet)AdminInterface::setParent() without second argument. (@VincentLanglet)AdminInterface::getParentAssociationMapping() for a non parent admin. (@VincentLanglet)ListMapper::add. (@VincentLanglet)ShowMapper::add. (@VincentLanglet)DatagridMapper::add. (@VincentLanglet)FormMapper::add. (@VincentLanglet)FieldDescriptionInterface::mergeOptions(). (@VincentLanglet)BaseFieldDescription::mergeOptions(). (@VincentLanglet)icon option with the format fa-plus or plus, use the format fa fa-plus or pass directly the <i> html instead. (@VincentLanglet)collection as argument 2 of FormMapper::add() method (@franmomu)FieldCollection::reorder() and Datagrid::reorderFilter() methods. (@VincentLanglet)false as translation_domain for tab and action buttons. (@VincentLanglet)Max_per_page drowpdown propagate correctly the sort_by filter value (@VincentLanglet)[#7266] Overriding AbstractAdmin::getDataSourceIterator() (@VincentLanglet)
AbstractAdmin::getDataSourceIterator() (@VincentLanglet)AbstractAdmin::create() (@VincentLanglet)AbstractAdmin::delete() (@VincentLanglet)AbstractAdmin::getFilterParameters() (@VincentLanglet)AbstractAdmin::getParentAssociationMapping() (@VincentLanglet)AbstractAdmin::getBaseRoutePattern() (@VincentLanglet)AbstractAdmin::getBaseRouteName() (@VincentLanglet)AbstractAdmin::getClass() (@VincentLanglet)AbstractAdmin::getSubClasses() (@VincentLanglet)AbstractAdmin::setSubClasses() (@VincentLanglet)AbstractAdmin::hasSubClass() (@VincentLanglet)AbstractAdmin::hasActiveSubClass() (@VincentLanglet)AbstractAdmin::getActiveSubClass() (@VincentLanglet)AbstractAdmin::getActiveSubclassCode() (@VincentLanglet)AbstractAdmin::getBatchActions() (@VincentLanglet)AbstractAdmin::getRoutes() (@VincentLanglet)AbstractAdmin::hasRoute() (@VincentLanglet)AbstractAdmin::isCurrentRoute() (@VincentLanglet)AbstractAdmin::generateObjectUrl() (@VincentLanglet)AbstractAdmin::generateUrl() (@VincentLanglet)AbstractAdmin::generateMenuUrl() (@VincentLanglet)AbstractAdmin::getFormBuilder() (@VincentLanglet)AbstractAdmin::defineFormBuilder() (@VincentLanglet)AbstractAdmin::attachAdminClass() (@VincentLanglet)AbstractAdmin::getForm() (@VincentLanglet)AbstractAdmin::getList() (@VincentLanglet)AbstractAdmin::getDatagrid() (@VincentLanglet)AbstractAdmin::getSideMenu() (@VincentLanglet)AbstractAdmin::getRootCode() (@VincentLanglet)AbstractAdmin::getRoot() (@VincentLanglet)AbstractAdmin::setBaseControllerName() (@VincentLanglet)AbstractAdmin::getBaseControllerName() (@VincentLanglet)AbstractAdmin::getMaxPerPage() (@VincentLanglet)AbstractAdmin::setMaxPageLinks() (@VincentLanglet)AbstractAdmin::getMaxPageLinks() (@VincentLanglet)AbstractAdmin::getFormGroups() (@VincentLanglet)AbstractAdmin::setFormGroups() (@VincentLanglet)AbstractAdmin::removeFieldFromFormGroup() (@VincentLanglet)AbstractAdmin::reorderFormGroup() (@VincentLanglet)AbstractAdmin::getFormTabs() (@VincentLanglet)AbstractAdmin::setFormTabs() (@VincentLanglet)AbstractAdmin::getShowTabs() (@VincentLanglet)AbstractAdmin::setShowTabs() (@VincentLanglet)AbstractAdmin::getShowGroups() (@VincentLanglet)AbstractAdmin::setShowGroups() (@VincentLanglet)AbstractAdmin::reorderShowGroup() (@VincentLanglet)AbstractAdmin::setParentFieldDescription() (@VincentLanglet)AbstractAdmin::getParentFieldDescription() (@VincentLanglet)AbstractAdmin::hasParentFieldDescription() (@VincentLanglet)AbstractAdmin::setSubject() (@VincentLanglet)AbstractAdmin::getSubject() (@VincentLanglet)AbstractAdmin::hasSubject() (@VincentLanglet)AbstractAdmin::getFormFieldDescriptions() (@VincentLanglet)AbstractAdmin::getFormFieldDescription() (@VincentLanglet)AbstractAdmin::hasFormFieldDescription() (@VincentLanglet)AbstractAdmin::addFormFieldDescription() (@VincentLanglet)AbstractAdmin::getShowFieldDescriptions() (@VincentLanglet)AbstractAdmin::getShowFieldDescription() (@VincentLanglet)AbstractAdmin::hasShowFieldDescription() (@VincentLanglet)AbstractAdmin::addShowFieldDescription() (@VincentLanglet)AbstractAdmin::removeShowFieldDescription() (@VincentLanglet)AbstractAdmin::getListFieldDescriptions() (@VincentLanglet)AbstractAdmin::hasListFieldDescription() (@VincentLanglet)AbstractAdmin::addListFieldDescription() (@VincentLanglet)AbstractAdmin::removeListFieldDescription() (@VincentLanglet)AbstractAdmin::getFilterFieldDescription() (@VincentLanglet)AbstractAdmin::hasFilterFieldDescription() (@VincentLanglet)AbstractAdmin::addFilterFieldDescription() (@VincentLanglet)AbstractAdmin::removeFilterFieldDescription() (@VincentLanglet)AbstractAdmin::getFilterFieldDescriptions() (@VincentLanglet)AbstractAdmin::addChild() (@VincentLanglet)AbstractAdmin::hasChild() (@VincentLanglet)AbstractAdmin::getChildren() (@VincentLanglet)AbstractAdmin::getChild() (@VincentLanglet)AbstractAdmin::isChild() (@VincentLanglet)AbstractAdmin::hasChildren() (@VincentLanglet)AbstractAdmin::setUniqid() (@VincentLanglet)AbstractAdmin::getUniqid() (@VincentLanglet)AbstractAdmin::getClassnameLabel() (@VincentLanglet)AbstractAdmin::getPersistentParameter() (@VincentLanglet)AbstractAdmin::setCurrentChild() (@VincentLanglet)AbstractAdmin::isCurrentChild() (@VincentLanglet)AbstractAdmin::getCurrentChildAdmin() (@VincentLanglet)AbstractAdmin::setTranslationDomain() (@VincentLanglet)AbstractAdmin::getTranslationDomain() (@VincentLanglet)AbstractAdmin::getTranslationLabel() (@VincentLanglet)AbstractAdmin::setRequest() (@VincentLanglet)AbstractAdmin::getRequest() (@VincentLanglet)AbstractAdmin::hasRequest() (@VincentLanglet)AbstractAdmin::getCode() (@VincentLanglet)AbstractAdmin::getBaseCodeRoute() (@VincentLanglet)AbstractAdmin::showIn() (@VincentLanglet)AbstractAdmin::createObjectSecurity() (@VincentLanglet)AbstractAdmin::isGranted() (@VincentLanglet)AbstractAdmin::getUrlSafeIdentifier() (@VincentLanglet)AbstractAdmin::getNormalizedIdentifier() (@VincentLanglet)AbstractAdmin::getShow() (@VincentLanglet)AbstractAdmin::setFormTheme() (@VincentLanglet)AbstractAdmin::getFormTheme() (@VincentLanglet)AbstractAdmin::setFilterTheme() (@VincentLanglet)AbstractAdmin::getFilterTheme() (@VincentLanglet)AbstractAdmin::addExtension() (@VincentLanglet)AbstractAdmin::getExtensions() (@VincentLanglet)AbstractAdmin::supportsPreviewMode() (@VincentLanglet)AbstractAdmin::determinedPerPageValue() (@VincentLanglet)AbstractAdmin::isAclEnabled() (@VincentLanglet)AbstractAdmin::setListMode() (@VincentLanglet)AbstractAdmin::getListMode() (@VincentLanglet)AbstractAdmin::getAccessMapping() (@VincentLanglet)AbstractAdmin::checkAccess() (@VincentLanglet)AbstractAdmin::hasAccess() (@VincentLanglet)AbstractAdmin::getActionButtons() (@VincentLanglet)renderWithExtraParams(), renderJson(), isXmlHttpRequest(), isPreviewRequested(), isPreviewApproved(), isInPreviewMode(), isPreviewDeclined(), validateCsrfToken(), escapeHtml(), getCsrfToken() methods in CRUDController (@VincentLanglet)false (@VincentLanglet)false (@VincentLanglet)$ variable (@phansys)[#7240] strict param to CRUDController::assertObjectExists() in order to check for the existence of the id in the request (@VincentLanglet)
strict param to CRUDController::assertObjectExists() in order to check for the existence of the id in the request (@VincentLanglet)history_revision_timestamp.html.twig (@VincentLanglet)[#7223] Reverted the changes of #7196, because they only work for Select2 version 4, that is used on the Master branche. Branche 3.x uses Select2 vers
FieldDescriptionInterface::getMappingType() return type (@VincentLanglet)sortable option in FieldDescriptionOptions (@franmomu)[#7203] edit_many_script.html.twig rendering (@VincentLanglet)
edit_many_script.html.twig rendering (@VincentLanglet)[#7191] Passing a code value in the request of AppendFormFieldElementAction, GetShortObjectDescriptionAction, RetrieveAutocompleteItemsAction, Retriev
code value in the request of AppendFormFieldElementAction, GetShortObjectDescriptionAction, RetrieveAutocompleteItemsAction, RetrieveFormFieldElementAction and SetObjectFieldValueAction. Pass _sonata_admin instead. (@VincentLanglet)Pool argument to the constructor of AppendFormFieldElementAction, GetShortObjectDescriptionAction, RetrieveAutocompleteItemsAction, RetrieveFormFieldElementAction and SetObjectFieldValueAction. Pass an AdminFetcher instead. (@VincentLanglet)[#7181] Fix SimplePager pagination (@VincentLanglet)
[#7077] Deprecated admin_services config key (@VincentLanglet)
default_admin_services config key to overwrite the default services provided to all the admin (@VincentLanglet)AdminExtensionInterface::configure() method (@yann-eugone)AbstractAdminExtension::configure() method with no content (@yann-eugone)AdminFetcher to fetch the Admin service associated to a request (@franmomu)AdminParamConverter to be able to inject an Admin service in a controller (@franmomu)final for method of every abstract classes (@VincentLanglet)AbstractAdmin::initialize() and call AdminExtensionInterface::configure() on each extension (@yann-eugone)admin_services config key (@VincentLanglet)ProxyQuery::execute() return type; it doesn't require to be an instance of Countable (@VincentLanglet)[#7132] Fixed inclusion of Source Sans Pro as main font (@jordisala1991)
AdminInterface::initialize() is the last method called (@dmaicher)admin_services.templates.form is correctly set (@dmaicher)admin_services.templates.filter is correctly set (@dmaicher)AdminInterface are only added if there are no calls defined yet (@dmaicher)do-not-use alias for exporter service. (@eerison)display_url.html.twig template (@VincentLanglet)[#7125] Unclosed "{" on src/Resources/views/CRUD/Association/edit_one_to_one.html.twig (@VincentLanglet)
[#7088] Deprecated overriding the breadcrumbs_builder variable passed to Twig templates (@franmomu)
FilterData to use it for forward compatibility with 4.0 (@franmomu)TaggedAdmin::setListModes() (@VincentLanglet)render_breadcrumbs and render_breadcrumbs_for_title Twig functions to render breadcrumbs (@franmomu)ProxyQuery::execute() method to array<object>|(\Traversable<object>&\Countable) (@VincentLanglet)TaggedAdmin::showMosaicButton() (@VincentLanglet)_email_link.html.twig template, use display_email.html.twig instead (@VincentLanglet)display_* templates passing a field_description, you SHOULD pass the option directly instead (@VincentLanglet)breadcrumbs_builder variable passed to Twig templates (@franmomu)ArrayAccess in ModelToIdPropertyTransformer (@VincentLanglet)DatagridBuilderInterface::addFilter phpdoc: The $type MUST be a class-string (@VincentLanglet)display_* templates without passing a field_description (@VincentLanglet)value dimension (@phansys)AbstractAdmin::preValidate() method (@VincentLanglet)[#7033] Added "block.admin_preview" block in order to show a preview for admin lists in dashboard (@phansys)
DatagridInterface::SORT_ORDER constant to use it instead of _sort_order string (@franmomu)DatagridInterface::SORT_BY constant to use it instead of _sort_by string (@franmomu)DatagridInterface::PAGE constant to use it instead of _page string.(@franmomu)DatagridInterface::PER_PAGE constant to use it instead of _per_page string (@franmomu)XEditableExtension::FIELD_DESCRIPTION_MAPPING to expose mapping between FieldDescription types and xEditable types (@franmomu)MapperInterface (@VincentLanglet)TemplateRegistryExtension constructor to @internal (@franmomu)FieldDescriptionInterface::getOptions() by calls to FieldDescriptionInterface::getOption() in views (@phansys)Filter::getOptions() by FilterInterface::getOption() in views (@phansys)Session instance from the Request object at AbstractAdmin::getListMode() (@phansys)form_help twig block (@franmomu)id parameter instead of calling AdminInterface::getIdParameter() method (@franmomu)field_options of filters (@franmomu)[#7010] Deprecated Sonata\AdminBundle\Admin\AdminHelper service alias. (@franmomu)
@internal. (@franmomu)Sonata\AdminBundle\Admin\AdminHelper service alias. (@franmomu)Sonata\AdminBundle\SonataConfiguration service alias. (@franmomu)Sonata\AdminBundle\Command\ExplainAdminCommand service alias. (@franmomu)Sonata\AdminBundle\Command\GenerateObjectAclCommand service alias. (@franmomu)Sonata\AdminBundle\Command\ListAdminCommand service alias. (@franmomu)Sonata\AdminBundle\Command\SetupAclCommand service alias. (@franmomu)Sonata\AdminBundle\Admin\BreadcrumbsBuilder service alias. (@franmomu)Sonata\AdminBundle\Event\AdminEventExtension service alias. (@franmomu)Sonata\AdminBundle\Filter\FilterFactory service alias. (@franmomu)Sonata\AdminBundle\Filter\Persister\SessionFilterPersister service alias. (@franmomu)Sonata\AdminBundle\Model\AuditManager service alias. (@franmomu)Sonata\AdminBundle\Search\SearchHandler service alias. (@franmomu)Sonata\AdminBundle\Templating\TemplateRegistry service alias. (@franmomu)Sonata\AdminBundle\Translator\BCLabelTranslatorStrategy service alias. (@franmomu)Sonata\AdminBundle\Translator\Extractor\AdminExtractor service alias. (@franmomu)Sonata\AdminBundle\Translator\FormLabelTranslatorStrategy service alias. (@franmomu)Sonata\AdminBundle\Translator\NativeLabelTranslatorStrategy service alias. (@franmomu)Sonata\AdminBundle\Translator\NoopLabelTranslatorStrategy service alias. (@franmomu)Sonata\AdminBundle\Translator\UnderscoreLabelTranslatorStrategy service alias. (@franmomu)sonata.admin.validator.inline service. (@franmomu)DatagridManagerInterface::getDefaultSortValues(). (@franmomu)TypeGuesserInterface::guess() to return null (@VincentLanglet)[#6978] Deprecated constructing AdminPoolLoader passing more than one argument. (@franmomu)
sonata.admin.audit_reader tag for Audit readers. (@franmomu)FieldDescriptionInterface::describesAssociation, FieldDescriptionInterface::describesSingleValuedAssociation, FieldDescriptionInterface::describesCollectionValuedAssociation to abstract the association mapping types. (@franmomu)AbstractFormContractor base class to centralize association form option validation & defaults. (@franmomu)Sonata\AdminBundle\FieldDescription\BaseFieldDescription class. (@franmomu)Sonata\AdminBundle\FieldDescription\FieldDescriptionCollection class. (@franmomu)Sonata\AdminBundle\FieldDescription\FieldDescriptionInterface interface. (@franmomu)Sonata\AdminBundle\FieldDescription\FieldDescriptionRegistryInterface interface. (@franmomu)AdminPoolLoader passing more than one argument. (@franmomu)AdminPoolLoader service alias. (@franmomu)sonata.admin.audit_reader. (@franmomu)MenuBuilderInterface interface. (@VincentLanglet)AbstractAdmin::buildSideMenu() (@VincentLanglet)AbstractAdmin::buildTabMenu() (@VincentLanglet)Sonata\AdminBundle\Admin\BaseFieldDescription class. (@franmomu)Sonata\AdminBundle\Admin\FieldDescriptionCollection class. (@franmomu)Sonata\AdminBundle\Admin\FieldDescriptionInterface interface. (@franmomu)Sonata\AdminBundle\Admin\FieldDescriptionRegistryInterface interface. (@franmomu)AbstractAdmin::configureActionButtons() (@peter-gribanov)[#6960] AbstractAdmin::configureDashboardActions() (@VincentLanglet)
AbstractAdmin::configureDashboardActions() (@VincentLanglet)AdminExtension::configureDashboardActions() (@VincentLanglet)AdminExtensionInterface::configureDashboardActions() (@VincentLanglet)ListMapper::NAME_ACTIONS to use instead of _action (@VincentLanglet)ListMapper::NAME_SELECT to use instead of select (@VincentLanglet)ListMapper::NAME_BATCH to use instead of batch (@VincentLanglet)AbstractAdmin::configureDashboardButtons() (@VincentLanglet)AdminExtension::configureDashboardButtons() (@VincentLanglet)AdminExtensionInterface::configureDashboardButtons() (@VincentLanglet)_select or _batch to determine if a field description is a select or a batch one. You should rely on the name ListMapper::NAME_SELECT or ListMapper::NAME_BATCH instead. (@VincentLanglet)[#6937] ModelManager::reverseTransform() (@VincentLanglet)
ModelManager::reverseTransform() (@VincentLanglet)AbstractAdmin::configureActionButtons() (@VincentLanglet)AdminExtensionInterface::configureActionButtons() (@VincentLanglet)AbstractAdminExtension::configureActionButtons() (@VincentLanglet)ModelManager::modelReverseTransform() (@VincentLanglet)AbstractAdmin::getActionButtons() (@VincentLanglet)[#6854] Deprecated ModelManagerInterface::getNewFieldDescriptionInstance() (@franmomu)
AbstractAdmin::configureFilterParameters() to configure/modify filter parameters (@dmaicher)FieldDescriptionFactoryInterface to create FieldDescription instances (@franmomu)TypeGuesserInterface to guess the proper FieldDescription type based on its properties (@franmomu)CRUDController::historyCompareRevisionsAction() (@phansys)AbstractAdmin::buildForm() (@VincentLanglet)AbstractAdmin::buildDatagrid() (@VincentLanglet)AbstractAdmin::buildShow() (@VincentLanglet)AbstractAdmin::buildList() (@VincentLanglet)AbstractAdmin::canAccessObject() in favor of AbstractAdmin::hasAccess() (@VincentLanglet)AdminInterface::canAccessObject() (@VincentLanglet)AdminInterface::configureActionButtons() and AbstractAdmin::configureActionButtons() will become protected (@VincentLanglet)ModelManagerInterface::getNewFieldDescriptionInstance() (@franmomu)CRUDController::historyCompareRevisionsAction() (@phansys)[#6911] Added AbstractAdminExtension::configurePersistentParameters() method stub (@core23)
[#6878] Passing a fieldDescription option name (@VincentLanglet)
name (@VincentLanglet)[#6883] Deprecated ModelManagerInterface::getModelInstance() method in favor of AbstractAdmin::createNewInstance(). (@franmomu)
AbstractAdmin::mergeParameters() to merge parameters but replace them when it's a subarray. (@willemverspyck)AbstractAdmin::alterObject() (@VincentLanglet)AbstractAdmin::createNewInstance() to allow the user to customize how to create their objects. (@franmomu)AbstractAdmin::configurePersistentParameters() (@VincentLanglet)AdminExtensionInterface::configurePersistentParameters() (@VincentLanglet)AbstractAdmin::getObject() (@VincentLanglet)LifecycleHookProviderInterface::preUpdate() (@VincentLanglet)LifecycleHookProviderInterface::preCreate() (@VincentLanglet)LifecycleHookProviderInterface::preDelete() (@VincentLanglet)LifecycleHookProviderInterface::postUpdate() (@VincentLanglet)LifecycleHookProviderInterface::postCreate() (@VincentLanglet)LifecycleHookProviderInterface::postDelete() (@VincentLanglet)ModelManagerInterface::getModelInstance() method in favor of AbstractAdmin::createNewInstance(). (@franmomu)AbstractAdmin::getPersistentParameters() (@VincentLanglet)AdminExtensionInterface::getPersistentParameters() (@VincentLanglet)[#6867] Handle case when attachAdminClass() does not find an admin to attach (@VincentLanglet)
attachAdminClass() does not find an admin to attach (@VincentLanglet)[#6814] Deprecated Sonata\AdminBundle\Admin\AbstractAdmin::formOptions property. (@rgrassian)
Pool::getAdminByFieldDescription() (@VincentLanglet)AdminClassNotFoundException (@VincentLanglet)AdminCodeNotFoundException (@VincentLanglet)TooManyAdminClassException (@VincentLanglet)default: true for the tag sonata.admin to define a default admin for a specific class (@VincentLanglet)RouteCollection::getRouteName (@VincentLanglet)RouteCollectionInterface::getRouteName (@VincentLanglet)Sonata\AdminBundle\Admin\AbstractAdmin::configureFormOptions() to do great stuff. (@rgrassian)table to override the whole datagrid table in the base_list.html.twig (@VincentLanglet)FieldDescription accessor option (@VincentLanglet)AbstractAdmin::alterNewInstance() (@VincentLanglet)DatagridMapper::add($name, $type, $filterOptions = [], $fieldType = null, $fieldOptions = null, $fieldDescriptionOptions = []) to DatagridMapper::add($name, $type, $filterOptions = [], $fieldDescriptionOptions = []) (@VincentLanglet)ProxyQueryInterface::execute(array $params = [], ?int $hydrationMode = null) signature to ProxyQueryInterface::execute() (@VincentLanglet)Pool::hasSingleAdminByClass() (@VincentLanglet)parameters option. (@VincentLanglet)Sonata\AdminBundle\Admin\AbstractAdmin::formOptions property. (@rgrassian)FieldDescription code option (@VincentLanglet)AbstractAdmin::getNewInstance() (@VincentLanglet)Pool::setTemplateRegistry() method. (@franmomu)Admin.setup_xeditable(). (@phansys)Sonata\AdminBundle\Form\DataTransformer\ModelToIdPropertyTransformer::$property which can be string[] as well (@dmaicher)AdminHelper::appendFormFieldElement renders nested forms. (@vladyslavstartsev)Your coding agent can read these notes before it upgrades. Set up the MCP server →