NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #1942 most downloaded on Packagist
The missing Symfony Admin Generator
Last release 4 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
[#6766] Removed deprecations for Sonata\AdminBundle\Admin\AbstractAdmin::setTemplate() (@wbloszyk)
Sonata\AdminBundle\Templating\MutableTemplateRegistryAwareInterface::setTemplate() (@wbloszyk)Sonata\AdminBundle\Templating\MutableTemplateRegistryAwareInterface::setTemplates() (@wbloszyk)bs (Bosnian) (@tambait)sr_Latn & sr_Cyrl (Serbian Latin & Cyrillic script) (@tambait)One column per quarter.
[#6676] Deprecated SonataAdminExtension::MOMENT_UNSUPPORTED_LOCALES constant (@tambait)
Sonata\AdminBundle\Twig\Extension\SecurityExtension (@tambait)Sonata\AdminBundle\Twig\Extension\CanonicalizeExtension (@tambait)Sonata\AdminBundle\Twig\Extension\XEditableExtension (@tambait)Sonata\AdminBundle\Twig\Extension\RenderElementExtension (@tambait)PagerInterface::getCurrentPageResults() (@VincentLanglet)PagerInterface. (@VincentLanglet)default_controller to configure the default controlled used by the admins. (@franmomu)SonataAdminExtension::MOMENT_UNSUPPORTED_LOCALES constant (@tambait)SonataAdminExtension::setXEditableTypeMapping() method (@tambait)SonataAdminExtension::getXEditableType() method (@tambait)SonataAdminExtension::getXEditableChoices() method (@tambait)SonataAdminExtension::getCanonicalizedLocaleForMoment() method (@tambait)SonataAdminExtension::getCanonicalizedLocaleForSelect2() method (@tambait)SonataAdminExtension::isGrantedAffirmative() method (@tambait)SonataAdminExtension::renderListElement() method (@tambait)SonataAdminExtension::renderViewElement() method (@tambait)SonataAdminExtension::renderViewElementCompare() method (@tambait)SonataAdminExtension::renderRelationElement() method (@tambait)SonataAdminExtension::getTemplate() method (@tambait)SonataAdminExtension::getTemplateRegistry() method (@tambait)DateOperatorType::TYPE_NULL and DateOperatorType::TYPE_NOT_NULL (@VincentLanglet)PagerInterface::getResults() (@VincentLanglet)[#6735] Deprecated Pool::setAdminServiceIds in favor of passing service ids as argument 2 to the constructor (@franmomu)
PagerInterface::countResults (@dmaicher)AbstractAdmin::getDefaultFilterParameters() to get default filter parameters (@kirya-dev)Added BaseGroupMapper::removeGroup() (@VincentLanglet)Added BaseGroupMapper::removeTab() (@VincentLanglet)PagerInterface::getNbResults() in favour of countResults() (@dmaicher)PagerInterface::setNbResults(...) (@dmaicher)PagerInterface::$nbResults (@dmaicher)Pool::setAdminServiceIds in favor of passing service ids as argument 2 to the constructor (@franmomu)Pool::setAdminGroups in favor of passing service ids as argument 3 to the constructor (@franmomu)Pool::setAdminClasses in favor of passing service ids as argument 4 to the constructor (@franmomu)CRUDController::configure() method, to configure the associated admin, you should call CRUDController::configureAdmin() instead (@franmomu)TemplateRegistryInterface::TYPE_* constants, they have been moved to FieldDescriptionInterface (@franmomu)[#6576] Added generics to AdminExtensionInterface. (@franmomu)
CRUD/Association/edit_many_script.html.twig (@ggabrovski)[#6614] Deprecate instantiating a new AbstractAdmin class with null as third argument (@VincentLanglet)
BaseFieldDescription::getFieldValue() (@VincentLanglet)AbstractTaggedAdmin::getListModes() (@VincentLanglet)TaggedAdminInterface::getListModes() (@VincentLanglet)RouteCollectionInterface imported from 4.x to ease upgrading process (@franmomu)BaseFieldDescription::construct() to set the field name (@VincentLanglet)getPage() to the PagerInterface (@VincentLanglet)getFirstPage() to the PagerInterface (@VincentLanglet)getLastPage() to the PagerInterface (@VincentLanglet)getNextPage() to the PagerInterface (@VincentLanglet)getPreviousPage() to the PagerInterface (@VincentLanglet)isFirstPage() to the PagerInterface (@VincentLanglet)isLastPage() to the PagerInterface (@VincentLanglet)getNbResults() to the PagerInterface (@VincentLanglet)getLinks() to the PagerInterface (@VincentLanglet)haveToPaginate() to the PagerInterface (@VincentLanglet)getQuery() to the PagerInterface (@VincentLanglet)TaggedAdminInterface (@VincentLanglet)AbstractTaggedAdmin (@VincentLanglet)AbstractAdmin::hasFilterPersister() method (@VincentLanglet)Sonata\AdminBundle\Filter\Filter::active property (@VincentLanglet)FieldDescriptionInterface::getFieldValue() (@VincentLanglet)FieldDescriptionInterface::setFieldMapping() (@VincentLanglet)BaseFieldDescription::setFieldMapping() (@VincentLanglet)AbstractPager::getCurrentMaxLink() (@VincentLanglet)AbstractPager::getMaxRecordLimit() (@VincentLanglet)AbstractPager::setMaxRecordLimit() (@VincentLanglet)AbstractPager::getCursor() (@VincentLanglet)AbstractPager::setCursor() (@VincentLanglet)AbstractPager::getObjectByCursor() (@VincentLanglet)AbstractPager::getCurrent() (@VincentLanglet)AbstractPager::getNext() (@VincentLanglet)AbstractPager::getPrevious() (@VincentLanglet)AbstractPager::getFirstIndex() (@VincentLanglet)AbstractPager::getLastIndex() (@VincentLanglet)AbstractPager::getParameters() (@VincentLanglet)AbstractPager::getParameter() (@VincentLanglet)AbstractPager::hasParameter() (@VincentLanglet)AbstractPager::setParameter() (@VincentLanglet)AbstractAdmin class with null as third argument (@VincentLanglet)AbstractAdmin::getManagerType() when no manager type is set (@VincentLanglet)AbstractAdmin::getFilterPersister() when no filter persister is set (@VincentLanglet)AbstractAdmin::getModelManager() when no model manager is set (@VincentLanglet)AbstractAdmin::getDataSource() when no data source is set (@VincentLanglet)AbstractAdmin::getFormContractor() when no form contractor is set (@VincentLanglet)AbstractAdmin::getShowBuilder() when no show builder is set (@VincentLanglet)AbstractAdmin::getListBuilder() when no list builder is set (@VincentLanglet)AbstractAdmin::getDatagridBuilder() when no datagrid builder is set (@VincentLanglet)AbstractAdmin::getTranslator() when no translator is set (@VincentLanglet)AbstractAdmin::getConfigurationPool() when no pool is set (@VincentLanglet)AbstractAdmin::setValidator() (@VincentLanglet)AbstractAdmin::getValidator() (@VincentLanglet)AbstractAdmin::getSecurityHandler() when no security handler is set (@VincentLanglet)AbstractAdmin::getMenuFactory() when no menu factory is set (@VincentLanglet)AbstractAdmin::getRouteBuilder() when no route builder is set (@VincentLanglet)AbstractAdmin::getLabelTranslatorStrategy() when no label translator strategy is set (@VincentLanglet)string or null as argument 2 constructing FormBuilderIterator (@franmomu)Sonata\AdminBundle\Filter\Filter::getValue() (@VincentLanglet)Sonata\AdminBundle\Filter\Filter::setValue() (@VincentLanglet)_per_page filter parameter is not set (@VincentLanglet)admin_pool to fetch an option instead of sonata_config (@franmomu)AdminHelper::getChildFormBuilder recursively (@franmomu)associated_property (@franmomu)[#6659] Deprecated Pool::getGroups() method. (@franmomu)
SonataConfiguration class to handle sonata global configuration. (@franmomu)sonata_config to access global configuration from Twig. (@franmomu)BaseFieldDescription::__construct() to do create a FieldDescription with the mapping. (@franmomu)Pool::getGroups() method. (@franmomu)Pool::hasGroup() method. (@franmomu)Pool::getAdminsByGroup() method. (@franmomu)AbstractAdmin::$validator property (@tambait)AdminInterface::getValidator method specification (@tambait)AdminInterface::setValidator method specification (@tambait)AbstractAdmin::getValidator method implementation (@tambait)AbstractAdmin::setValidator method implementation (@tambait)AddDependencyCallsCompilerPass - validator related keys (@tambait)DependencyInjection/Configuration - validator related config option (@tambait)Pool::getTitle() method. (@franmomu)Pool::getTitleLogo() method. (@franmomu)Pool::getOption() method. (@franmomu)sonata_admin variable. (@franmomu)FieldDescriptionInterface::setFieldMapping() method. (@franmomu)FieldDescriptionInterface::setAssociationMapping() method. (@franmomu)FieldDescriptionInterface::setParentAssociationMappings() method. (@franmomu)FieldDescriptionInterface::setMappingType() method. (@franmomu)BaseFieldDescription::setMappingType() method. (@franmomu)[#6634] Deprecated Pool::getPropertyAccessor() method. (@franmomu)
CRUDController (@VincentLanglet)row_attr to the form_row container. (@nieuwenhuisen)AdminSearchCompilerPass in order to configure which admins must support search. (@phansys)global_search attribute in sonata.admin tags, which admits boolean values. (@phansys)ModelManagerInterface::createQuery method (@neok)CRUDController::handleXmlHttpRequestSuccessResponse method is now protected (@nieuwenhuisen)CRUDController::handleXmlHttpRequestErrorResponse method is now protected (@nieuwenhuisen)AdminInterface::validate method specification (@tambait)AbstractAdmin:validate method implementation (@tambait)AbstractAdmin::attachInlineValidator() method (@tambait)AdminExtensionInterface::validate() method specification (@tambait)AbstractAdminExtension::validate() method implementation (@tambait)Pool::getPropertyAccessor() method. (@franmomu)PropertyAccessor as argument 1 to Sonata\AdminBundle\Admin\AdminHelper constructor. (@franmomu)PropertyAccessor as argument 5 to Sonata\AdminBundle\Action\SetObjectFieldValueAction constructor. (@franmomu)PropertyAccessor as argument 5 to Sonata\AdminBundle\Twig\Extension\SonataAdminExtension constructor. (@franmomu)CRUDController::batchAction() (@peter-gribanov)[#6597] AdminInterface extends MutableTemplateRegistryAwareInterface instead of TemplateRegistryAwareInterface (@VincentLanglet)
AdminInterface extends MutableTemplateRegistryAwareInterface instead of TemplateRegistryAwareInterface (@VincentLanglet)[#6593] Not passing 'show', 'hide' or 'fade' as argument 4 to Sonata\AdminBundle\Block\AdminSearchBlockService() (@VincentLanglet)
Sonata\AdminBundle\Block\AdminSearchBlockService() (@VincentLanglet)[#6568] Deprecated ModelManagerInterface::modelTransform() method (@franmomu)
NOT_EQUAL operator for StringOperatorType (@VincentLanglet)[#6556] Deprecated Sonata\AdminBundle\Templating\TemplateRegistry:setTemplate() (@wbloszyk)
collection_by_reference option for AdminType (@VincentLanglet)Sonata\AdminBundle\Templating\AbstractTemplateRegistry (@wbloszyk)Sonata\AdminBundle\Templating\MutableTemplateRegistry (@wbloszyk)Sonata\AdminBundle\Templating\MutableTemplateRegistryAwareInterface (@wbloszyk)collection_by_reference is used instead of by_reference in AdminType in order to know which call should be used between ObjectManipulator::addInstance()andObjectManipulator::setObject()` (@VincentLanglet)Sonata\AdminBundle\Templating\TemplateRegistryAwareInterface to handle instances of TemplateRegistryInterface. (@wbloszyk)ModelType, use null for native loading (@kirya-dev)Sonata\AdminBundle\Templating\TemplateRegistry:setTemplate() (@wbloszyk)Sonata\AdminBundle\Templating\TemplateRegistry:setTemplates() (@wbloszyk)DatagridManagerInterface with no replacement (@VincentLanglet)ModelManagerInterface::getDataSourceIterator() (@VincentLanglet)ObjectManipulator (@peter-gribanov)[#6530] Added the ability to scroll the filter list dropdown (@VincentLanglet)
[#6515] Deprecate FilterInterface::filter() method (@VincentLanglet)
Pool::hasSingleAdminByClass() (@VincentLanglet)FilterInterface::filter() method (@VincentLanglet)Validators::validateEntityName() (@phansys)Sonata\AdminBundle\Controller\CRUDController::getRestMethod() method in favor of Symfony\Component\HttpFoundation\Request::getMethod() (@phansys)acl_user_manager service explicitly when using friendsofsymfony/user-bundle (@franmomu)acl_user_manager service without implementing AdminAclUserManagerInterface (@franmomu)ModelManagerInterface::addIdentifiersToQuery() (@phansys)CRUDController::getRestMethod() respecting Request::getHttpMethodParameterOverride() (@phansys)[#6420] Deprecate Passing a third argument to GenerateObjectAclCommand::__construct() (@VincentLanglet)
ModelManagerInterface::find() with
ModelManagerInterface::findBy() in order to avoid multiple transactions.
(@phansys)GenerateObjectAclCommand::__construct()
(@VincentLanglet)Pool::getContainer() method.
(@franmomu)GenerateObjectAclCommand (@franmomu)getCurrentChild() when calling
getCurrentChildAdmin(). (@jorrit)ModelInterface::getPaginationParameters().
(@franmomu)ModelInterface::getSortParameters().
(@franmomu)getTargetEntity
(@jordisala1991)MergeCollectionListener when using the ModelType
form type with the model_manager option set.
(@jorrit)[#6386] Deprecated ProxyQueryInterface::getUniqueParameterId. (@franmomu)
Sonata\AdminBundle\Templating\TemplateRegistryAwareInterface with getTemplateRegistry(), hasTemplateRegistry() and setTemplateRegistry() methods (@wbloszyk)ModelManagerInterface::supportsQuery() (@VincentLanglet)Sonata\AdminBundle\Admin\AbstractAdmin::hasTemplateRegistry(): bool (@wbloszyk)AbstractAdmin::configureExportFields extension point (@core23)symfony/config 5.1. (@franmomu)symfony/dependency-injection 5.1. (@franmomu)symfony/routing 5.1. (@franmomu)symfony/security-csrf and symfony/asset ^5.1 (@jordisala1991)ModelManagerInterface (@core23)addFormFieldDescription if field role no granted (@kirya-dev)Sonata\AdminBundle\Admin\AbstractAdmin::setTemplates() (@wbloszyk)Sonata\AdminBundle\Admin\AbstractAdmin::setTemplate() (@wbloszyk)ProxyQueryInterface::getUniqueParameterId. (@franmomu)ProxyQueryInterface::entityJoin. (@franmomu)object to AbstractAdmin::toString (@VincentLanglet)null to AbstractAdmin::getUrlSafeIdentifier, AbstractAdmin::getNormalizedIdentifier, AbstractAdmin::getId (@VincentLanglet)GetShortObjectDescriptionAction with an empty objectId. (@VincentLanglet)group now correctly use the admin translation domain when using the admin label. (@VincentLanglet)[#6312] Deprecated Sonata\AdminBundle\Model\ModelManagerInterface collection-related methods (@VincentLanglet)
Sonata\AdminBundle\Model\ModelManagerInterface collection-related methods (@VincentLanglet)callable that does not return Symfony\Component\Routing\Route as $element (2nd argument) to Sonata\AdminBundle\Route\RouteCollection::addElement($code, $element) (@vladyslavstartsev)[#6291] Deprecated Sonata\AdminBundle\Datagrid\ProxyQueryInterface::getSingleScalarResult (@VincentLanglet)
doctrine/common 3 (@jaikdean)Sonata\AdminBundle\Datagrid\ProxyQueryInterface::getSingleScalarResult (@VincentLanglet)base_filter_field.html.twig template (@franmomu)base_inline_edit_field.html.twig template (@franmomu)base_standard_edit_field.html.twig template (@franmomu)edit_array.html.twig template (@franmomu)edit_boolean.html.twig template (@franmomu)edit_file.html.twig template (@franmomu)edit_integer.html.twig template (@franmomu)edit_sonata_type_immutable_array.html.twig template (@franmomu)edit_string.html.twig template (@franmomu)edit_text.html.twig template (@franmomu)BaseFieldDescription::setHelp() and BaseFieldDescription::getHelp() (@franmomu)help option to BaseFieldDescription::setOptions() (@franmomu)FormMapper::setHelps() and FormMapper:: addHelp() (@franmomu)help option to FormMapper::add() third argument containing HTML code without also passing help_html with true value (@franmomu)[#6234] Deprecated ModelManagerInterface::getParentFieldDescription. (@franmomu)
null or an instance of EngineInterface as argument 2 when instantiating Sonata\AdminBundle\Block\AdminListBlockService, Sonata\AdminBundle\Block\AdminSearchBlockService or Sonata\AdminBundle\Block\AbstractBlockService (@VincentLanglet)ModelManagerInterface::getParentFieldDescription. (@franmomu)SonataAdminExtension::getValueFromFieldDescription() (@jorrit)Resources/views/CRUD/Association/edit_many_script.html.twig to "application/json" to prevent 406 (Not acceptable) error. (@nieuwenhuisen)getNewInstance() on Admin instance before extracting translatable strings. (@jorrit)datetime field type as editable (@peter-gribanov)date and datetime in the same timezone (@peter-gribanov)FieldDescriptionInterface::getTargetModel() exists before calling it. (@franmomu)[#6040] Added new AdminExtractor to extract translations from the Admin classes (@franmomu)
[] value for every non-nullable array class properties (@VincentLanglet)mb_strlen() on null in RetrieveAutocompleteItemsAction (@mar20)[#6170] Move twig/extra-bundle from require to suggest (@wbloszyk)
[#6134] Added StringOperatorType (@napestershine)
StringOperatorType
(@napestershine)Allow null argument for StringExtension constructor
null argument for StringExtension constructorDeprecated sonata_admin.options.legacy_twig_text_extension configuration
ar translationsbg translationsca translationscs translationsde translationses translationseu translationsfa translationshr translationshu translationsit translationsja translationslb translationslt translationslv translationsno translationspl translationspt translationspt_BR translationsro translationsru translationssk translationssl translationssv_SE translationstr translationsuk translationszn_CH translationsgetFormFieldDescriptions, getFormFieldDescription and
hasFormFieldDescription doesn't build form anymore if the build already
started, avoiding an infinite loop.getShowFieldDescriptions, getShowFieldDescription and
hasShowFieldDescription doesn't build show anymore if the build already
started, avoiding an infinite loop.getListFieldDescriptions, getListFieldDescription and
hasListFieldDescription doesn't build list anymore if the build already
started, avoiding an infinite loop.getFilterFieldDescriptions, getFilterFieldDescription and
hasFilterFieldDescription doesn't build datagrid anymore if the build
already started, avoiding an infinite loop.sonata_admin.options.legacy_twig_text_extension configurationInfinite recursion error when mapping form fields with a help option set.
Deprecated Sonata\AdminBundle\Twig\Extension\UnicodeString in favor of Symfony\Component\String\UnicodeString.
FieldDescriptionInterface::getParent().FieldDescriptionInterface::getAssociationAdmin().FieldDescriptionInterface::getAdmin().sonata-icheck and sonata-select2 when iCheck or Select2 are
enabled.Sonata\AdminBundle\EventListener\AssetsInstallCommandListener to add
sonatacore asssets when SonataCoreBundle is not installed_action list field.truncate filter with u filter.sonata.admin.configuration.legacy_twig_text_extension when
SonataCoreBundle is not installedAbstractAdmin::getChild() when there is no child.BaseFieldDescription::getParent() when there is no parent.BaseFieldDescription::getAssociationAdmin() when there is no
association admin.BaseFieldDescription::getAdmin() when there is no admin.Pool::getAdminByClass() when there is no admin for the class.Sonata\AdminBundle\Twig\Extension\UnicodeString in favor of
Symfony\Component\String\UnicodeString.sonata_truncate in favor of u.truncate.FieldDescriptionInterface::getTargetEntity() in favor of
FieldDescriptionInterface::getTargetModel();AdminHelper::getEntityClassName() in favor of
AdminHelper::getModelClassName();GenerateObjectAclCommand::getUserEntityClass() in favor of
GenerateObjectAclCommand::getUserModelClass().--user_entity option in favor of --user_model at
sonata:admin:generate-object-acl command.SonataCoreBundle dependenciesDeprecated smallint type for template ; use integer instead.
TemplateRegistry::TYPE_* constant to be used instead of string value.format option for time field type.object variable in history compare view.label_catalogue correctly use the default value
default_label_catalogueicon correctly use the default value default_iconinline => natural option.smallint type for template ; use integer instead.bigint type for template ; use integer instead.decimal type for template ; use float instead.text type for template ; use string instead.Reference to configuration option in legacy_twig_text_extension deprecation message.
AbstractAdmin::configureDefaultSortValues to override $datagridValues.AbstractAdminExtension::configureDefaultSortValues to override $datagridValues.legacy_twig_text_extension deprecation message.trans method of AbstractAdminone_to_many, many_to_many, many_to_one and one_to_one type templates.doctrine/inflection to ^1.4 || ^2.0showMapper and listMapper.AbstractAdmin::maxPerPage propertyAbstractAdmin::setMaxPerPage methodAbstractAdmin::perPageOption propertyAbstractAdmin::setPerPageOption methodAbstractAdmin::predefinePerPageOptions methodAbstractAdmin::datagridValues propertyModelManagerInterface without implementing DatagridManagerInterfaceDeprecate the call of AbstractAdmin::getParentFieldDescription if the value is null.
Sonata\AdminBundle\Admin\AdminHelper instance to
Sonata\AdminBundle\Form\Type\AdminType::__construct()AbstractAdmin::getParentFieldDescription if the value is null.AbstractAdmin::getSubject if the value is null.AbstractAdmin::getListFieldDescription if the value is null.AbstractAdmin::getParent if the value is null.parentSubject in case of multiple calls to the AppendFormFieldElementAction.label => false doesn't lead to a missing '' translation in the profiler.label => '0' and others non nullable falsy value are not overridden anymore.Sonata\AdminBundle\Filter\FilterInterface::getRenderSettings().Deprecate getModelIdentifier in favor of getIdentifierFieldNames in ModelManagerInterface.
AbstractAdmin::IsCurrentChild methoddisplay, key_translation_domain and
value_translation_domain) to the array field on Show and List pages.sortable, sort_parent_association_mappings, and
sort_field_mapping when associated_property is set in ListMapper::add
to enable sorting on associated_property by default.AbstractAdmin::GetCurrentChild methodgetModelIdentifier in favor of getIdentifierFieldNames in
ModelManagerInterface.array in
AbstractAdmin::getFormGroups(), AbstractAdmin::getFormTabs(),
AbstractAdmin::getShowTabs(), AbstractAdmin::getShowGroups().SimplePager::getResults will not return ArrayCollection in next major
version (4.0)AbstractAdmin::isGranted().void in some methods which are intended to return a value
or null.UrlGeneratorInterface::generateMenuUrl().AdminHelper::addNewInstance to detect methods based on method_exists
instead of callable to maintain previous BC behavior.$this->getSubject() always returns a value in configureFormFieldDeprecated "truncate.preserve" and "truncate.separator" options in list_html.html.twig and show_html.html.twig views;
link_parameters for list action button. This option is
passed to generateObjectUrl.sonata_admin.options.legacy_twig_text_extension in order to control which
text extension will be used;truncate.cut and truncate.ellipsis option in list_html.html.twig
and show_html.html.twig views.SonataAdminExtension with an instance of TranslationInterface
from componentslist_html.html.twig and show_html.html.twig views;sonata_admin.options.legacy_twig_text_extension as false.Added SonataIntlBundle support back
configureQuery method for an easier way to override Admin list queries.createQuery method.Deprecation about passing more than one attribute to isGranted
AbstractSonataAdminExtensionAccept HTTP header, even if multiple types are provided.isGrantedDeprecation passing more than one attribute to isGranted
_sort_by filter to not be initially defined.isGranted_sort_by without _sort_order does not use invalid value anymoresonata_help when it is actually usedifEnd throws LogicException if there is nothing to end.
ifEnd throws LogicException if there is nothing to end.ContainerBuilder::getDefinition() with ids which have no associated
definition.sonata.admin.manager tag to services implementing ModelManagerInterface.
sonata.admin.manager tag to services implementing ModelManagerInterface.EqualOperatorTypesonata_help in form typesAdd support for symfony form help
Deprecations for event dispatching
Added OperatorType usable in CallbackFilter
sonata_type_model_list_widget after operations
add/list/removeAbility of using string names and FQCNs to define filter types
compatibility with doctrine/doctrine-bundle 2
doctrine/doctrine-bundle 2crash when using the command that generates ACLs
bin/console list or just bin/consolesonata.admin.block.statsUsing array accessor in traversable objects which aren't implementing \ArrayAccess at AbstractAdmin::buildForm().
\ArrayAccess at AbstractAdmin::buildForm().transchoice() Twig filter at block_stats.html.twigincorrect sanity check ACL manipulators
{% trans %} Twig tag for pluralized catalogs with
symfony/translation < 4.2.CRUDController::validateCsrfToken to validate tokens not only from a POST
request, but GET as wellCRUDController::validateCsrfToken to accept missing request token.Usages of deprecated transchoice tags with trans
strict_variables enabledtranschoice tags with transsonata-project/block-bundle (3.11 => 3.17).Added format option to show type trans
format option to show type transTemplateRegistry::hasTemplate() in order to know if a template with a given name is registered.Sonata\AdminBundle\Admin\AdminHelper;Sonata\AdminBundle\Admin\Extension\LockExtension;Sonata\AdminBundle\Admin\FieldDescriptionCollection;Sonata\AdminBundle\Admin\Pool;Sonata\AdminBundle\Annotation\Admin;Sonata\AdminBundle\Block\AdminListBlockService;Sonata\AdminBundle\Block\AdminSearchBlockService;Sonata\AdminBundle\Block\AdminStatsBlockService;Sonata\AdminBundle\Command\ExplainAdminCommand;Sonata\AdminBundle\Command\GenerateAdminCommand;Sonata\AdminBundle\Command\GenerateObjectAclCommand;Sonata\AdminBundle\Command\ListAdminCommand;Sonata\AdminBundle\Command\SetupAclCommand;Sonata\AdminBundle\Command\Validators;Sonata\AdminBundle\Datagrid\Datagrid;Sonata\AdminBundle\Datagrid\DatagridMapper;Sonata\AdminBundle\Datagrid\ListMapper;Sonata\AdminBundle\Datagrid\SimplePager;Sonata\AdminBundle\DependencyInjection\Compiler\AddDependencyCallsCompilerPass;Sonata\AdminBundle\DependencyInjection\Compiler\AddFilterTypeCompilerPass;Sonata\AdminBundle\DependencyInjection\Compiler\ExtensionCompilerPass;Sonata\AdminBundle\DependencyInjection\Compiler\GlobalVariablesCompilerPass;Sonata\AdminBundle\DependencyInjection\Compiler\ModelManagerCompilerPass;Sonata\AdminBundle\DependencyInjection\Configuration;Sonata\AdminBundle\DependencyInjection\SonataAdminExtension;Sonata\AdminBundle\Event\AdminEventExtension;Sonata\AdminBundle\Event\ConfigureEvent;Sonata\AdminBundle\Event\ConfigureMenuEvent;Sonata\AdminBundle\Event\ConfigureQueryEvent;Sonata\AdminBundle\Event\PersistenceEvent;Sonata\AdminBundle\Exception\LockException;Sonata\AdminBundle\Exception\ModelManagerException;Sonata\AdminBundle\Exception\NoValueException;Sonata\AdminBundle\Export\Exporter;Sonata\AdminBundle\Filter\FilterFactory;Sonata\AdminBundle\Form\ChoiceList\ModelChoiceLoader;Sonata\AdminBundle\Form\DataTransformer\ArrayToModelTransformer;Sonata\AdminBundle\Form\DataTransformer\LegacyModelsToArrayTransformer;Sonata\AdminBundle\Form\DataTransformer\ModelToIdPropertyTransformer;Sonata\AdminBundle\Form\DataTransformer\ModelToIdTransformer;Sonata\AdminBundle\Form\DataTransformer\ModelsToArrayTransformer;Sonata\AdminBundle\Form\EventListener\MergeCollectionListener;Sonata\AdminBundle\Form\Extension\ChoiceTypeExtension;Sonata\AdminBundle\Form\Extension\Field\Type\FormTypeFieldExtension;Sonata\AdminBundle\Form\Extension\Field\Type\MopaCompatibilityTypeFieldExtension;Sonata\AdminBundle\Form\FormMapper;Sonata\AdminBundle\Form\Type\AclMatrixType;Sonata\AdminBundle\Form\Type\AdminType;Sonata\AdminBundle\Form\Type\ChoiceFieldMaskType;Sonata\AdminBundle\Form\Type\CollectionType;Sonata\AdminBundle\Form\Type\Filter\ChoiceType;Sonata\AdminBundle\Form\Type\Filter\DateRangeType;Sonata\AdminBundle\Form\Type\Filter\DateTimeRangeType;Sonata\AdminBundle\Form\Type\Filter\DateTimeType;Sonata\AdminBundle\Form\Type\Filter\DateType;Sonata\AdminBundle\Form\Type\Filter\DefaultType;Sonata\AdminBundle\Form\Type\Filter\NumberType;Sonata\AdminBundle\Form\Type\ModelAutocompleteType;Sonata\AdminBundle\Form\Type\ModelHiddenType;Sonata\AdminBundle\Form\Type\ModelListType;Sonata\AdminBundle\Form\Type\ModelReferenceType;Sonata\AdminBundle\Form\Type\ModelType;Sonata\AdminBundle\Generator\AdminGenerator;Sonata\AdminBundle\Generator\ControllerGenerator;Sonata\AdminBundle\Guesser\TypeGuesserChain;Sonata\AdminBundle\Manipulator\ServicesManipulator;Sonata\AdminBundle\Menu\Matcher\Voter\ActiveVoter;Sonata\AdminBundle\Menu\Matcher\Voter\AdminVoter;Sonata\AdminBundle\Menu\MenuBuilder;Sonata\AdminBundle\Menu\Provider\GroupMenuProvider;Sonata\AdminBundle\Model\AuditManager;Sonata\AdminBundle\Route\AdminPoolLoader;Sonata\AdminBundle\Route\DefaultRouteGenerator;Sonata\AdminBundle\Route\PathInfoBuilder;Sonata\AdminBundle\Route\QueryStringBuilder;Sonata\AdminBundle\Route\RouteCollection;Sonata\AdminBundle\Route\RoutesCache;Sonata\AdminBundle\Route\RoutesCacheWarmUp;Sonata\AdminBundle\Search\SearchHandler;Sonata\AdminBundle\Security\Acl\Permission\AdminPermissionMap;Sonata\AdminBundle\Security\Acl\Permission\MaskBuilder;Sonata\AdminBundle\Security\Handler\AclSecurityHandler;Sonata\AdminBundle\Security\Handler\NoopSecurityHandler;Sonata\AdminBundle\Security\Handler\RoleSecurityHandler;Sonata\AdminBundle\Show\ShowMapper;Sonata\AdminBundle\SonataAdminBundle;Sonata\AdminBundle\Translator\BCLabelTranslatorStrategy;Sonata\AdminBundle\Translator\Extractor\JMSTranslatorBundle\AdminExtractor;Sonata\AdminBundle\Translator\FormLabelTranslatorStrategy;Sonata\AdminBundle\Translator\NativeLabelTranslatorStrategy;Sonata\AdminBundle\Translator\NoopLabelTranslatorStrategy;Sonata\AdminBundle\Translator\UnderscoreLabelTranslatorStrategy;Sonata\AdminBundle\Twig\Extension\SonataAdminExtension;Sonata\AdminBundle\Twig\GlobalVariables;Sonata\AdminBundle\Util\AdminAclManipulator;Sonata\AdminBundle\Util\AdminObjectAclData;Sonata\AdminBundle\Util\AdminObjectAclManipulator;Sonata\AdminBundle\Util\FormBuilderIterator;Sonata\AdminBundle\Util\FormViewIterator.Datagrid::getFilter();TemplateRegistry::getTemplate();AbstractAdmin::getActiveSubClass() and AbstractAdmin::getActiveSubclassCode() when there is no active subclass.void instead of null in functions which are capable to return values.ModelManagerCompilerPass & ObjectAclManipulatorCompilerPass to avoid crashing when there's services with numerical idsAbstractAdmin::toString() from base_list.htm.twig when the admin's subject doesn't declare __toString() method.The default value for "admin_code" setting at AdminSearchBlockService.
AdminSearchBlockService.ListMapper::add() are
cast to boolean before using them to infer if the field must be used as
identifier or not.Pool::getAdminByAdminCode();Pool::getAdminByAdminCode().Fixed deprecation notice when core services are injected in service through autowiring
ListMapper::add(), DatagridMapper::add(),
ShowMapper::add() and FormMapper::add(); in order to restrict the content
rendering based on the provided role.{% spaceless %} tag, which is deprecated as of Twig 1.38
with {% apply spaceless %} filter{% for .. if .. %}, which is deprecated as of Twig 2.10
with filter filter'<title> tag, which is truncated to 15 characters.ListMapper::add() are
cast to boolean before using them to infer if the field must be used as
identifier or not.ListMapper::add().Crash with Twig 2.11 with message Template "@SonataAdmin/CRUD/base_edit_form.html.twig" cannot be used as a trait. (second attempt)
Template "@SonataAdmin/CRUD/base_edit_form.html.twig" cannot be used as a trait.
(second attempt)CreateClassCacheCommand deprecation message on container compiling
Template "@SonataAdmin/CRUD/base_edit_form.html.twig" cannot be used as a trait.<time> tags, which print the dates in UTC using datetime and title
attributes, allowing to view the UTC date with the default browser tooltip.### Fixed - Fixed Tabs in Edit Form
Add canonicalization fallback for missing moment.js de_DE locale
de_DE localeSonata\Exporter\Source\SourceIteratorInterfaceChanged the way the search action generates links to the results. It used to consider every item editable, but would throw an error if it wasn't the c
getSearchResultLink that choses the best way to link to a
search result; eg. edit if available, or show.Added ability to back to the tab which was edited on saving an object
Check if request exists before using it and getting an exception
show_label option not being honored when set to false
show_label option not being honored when set to false_page and _per_page from request<time> tags, which print the dates in UTC using datetime and title
attributes, allowing to view the UTC date with the default browser tooltip.__toString method.Nothing published for this version
Regression bug which causes SonataMediaBundle's Media list to show fallback image in mosaic view instead of real image preview
Metadata class from block bundlesonata_type_collection fields no longer deletes row when adding a new rowCrash about incompatible signatures involving ErrorElement
ErrorElementnull as an admin class nameSome deprecations about the new namespaces have been fixed
Sonata\AdminBundle\Object\Metadata classsonata-project/exporter 2strict_types declaration in generated codeAdmin::getObjectMetadata return type in PHPDocDefault admin service options (group, label catalogue and icon) are now configurable
make:sonata:adminYour coding agent can read these notes before it upgrades. Set up the MCP server →