Skip to content

studio ui Appearance&Branding cannot be saved #206

Description

@max-zhang78

Affected Version

2025.4 - LTS

Affected capability

Other

Steps to reproduce

Pimcore upgrade from 20205.1 to 2025.4. When I first started it, I thought there was an error in the configuration file and modified it to config. yaml. However, it didn't work. I thought it was because the license was not activated. Now that it has been activated, it still doesn't work. I don't know if it's a configuration error or a bug?

Image

other bug
if change the type: 'symfony-config' -> type: 'settings-store' ,studio ui api

Uncaught PHP Exception ErrorException: "Warning: Undefined array key "error_pages"" at SystemSettingsProvider.php line 135 {"exception":"[object] (ErrorException(code: 0): Warning: Undefined array key \"error_pages\" at /var/www/html/vendor/pimcore/studio-backend-bundle/src/Setting/Provider/SystemSettingsProvider.php:135)"} []

{
    "type": "https:\/\/tools.ietf.org\/html\/rfc2616#section-10",
    "title": "An error occurred",
    "status": 500,
    "detail": "Warning: Undefined array key \"error_pages\"",
    "class": "ErrorException",
    "trace": [
        {
            "namespace": "",
            "short_class": "",
            "class": "",
            "type": "",
            "function": "",
            "file": "\/var\/www\/html\/vendor\/pimcore\/studio-backend-bundle\/src\/Setting\/Provider\/SystemSettingsProvider.php",
            "line": 135,
            "args": []
        },
        {
            "namespace": "Pimcore\\Bundle\\StudioBackendBundle\\Setting\\Provider",
            "short_class": "SystemSettingsProvider",
            "class": "Pimcore\\Bundle\\StudioBackendBundle\\Setting\\Provider\\SystemSettingsProvider",
            "type": "->",
            "function": "getDocumentSettings",
            "file": "\/var\/www\/html\/vendor\/pimcore\/studio-backend-bundle\/src\/Setting\/Provider\/SystemSettingsProvider.php",
            "line": 59,
            "args": []
        },
        {
            "namespace": "Pimcore\\Bundle\\StudioBackendBundle\\Setting\\Provider",
            "short_class": "SystemSettingsProvider",
            "class": "Pimcore\\Bundle\\StudioBackendBundle\\Setting\\Provider\\SystemSettingsProvider",
            "type": "->",
            "function": "getSettings",
            "file": "\/var\/www\/html\/vendor\/pimcore\/studio-backend-bundle\/src\/Translation\/Repository\/TranslationRepository.php",
            "line": 49,
            "args": []
        },
        {
            "namespace": "Pimcore\\Bundle\\StudioBackendBundle\\Translation\\Repository",
            "short_class": "TranslationRepository",
            "class": "Pimcore\\Bundle\\StudioBackendBundle\\Translation\\Repository\\TranslationRepository",
            "type": "->",
            "function": "__construct",
            "file": "\/var\/www\/html\/var\/cache\/dev\/ContainerS6UD7jI\/getTranslationRepositoryInterfaceService.php",
            "line": 35,
            "args": [
                [
                    "object",
                    "Pimcore\\Bundle\\StudioBackendBundle\\Setting\\Provider\\SystemSettingsProvider"
                ],
                [
                    "object",
                    "Doctrine\\DBAL\\Connection"
                ],
                [
                    "object",
                    "Pimcore\\Bundle\\StudioBackendBundle\\Security\\Service\\SecurityService"
                ],
                [
                    "object",
                    "Pimcore\\Config"
                ]
            ]
        },
        {
            "namespace": "ContainerS6UD7jI",
            "short_class": "getTranslationRepositoryInterfaceService",
            "class": "ContainerS6UD7jI\\getTranslationRepositoryInterfaceService",
            "type": "::",
            "function": "do",
            "file": "\/var\/www\/html\/var\/cache\/dev\/ContainerS6UD7jI\/App_KernelDevDebugContainer.php",
            "line": 1472,
            "args": [
                [
                    "object",
                    "ContainerS6UD7jI\\App_KernelDevDebugContainer"
                ],
                [
                    "boolean",
                    true
                ]
            ]
        },
        {
            "namespace": "ContainerS6UD7jI",
            "short_class": "App_KernelDevDebugContainer",
            "class": "ContainerS6UD7jI\\App_KernelDevDebugContainer",
            "type": "->",
            "function": "load",
            "file": "\/var\/www\/html\/var\/cache\/dev\/ContainerS6UD7jI\/getTranslatorServiceInterfaceService.php",
            "line": 34,
            "args": [
                [
                    "string",
                    "getTranslationRepositoryInterfaceService.php"
                ]
            ]
        },
        {
            "namespace": "ContainerS6UD7jI",
            "short_class": "getTranslatorServiceInterfaceService",
            "class": "ContainerS6UD7jI\\getTranslatorServiceInterfaceService",
            "type": "::",
            "function": "do",
            "file": "\/var\/www\/html\/var\/cache\/dev\/ContainerS6UD7jI\/App_KernelDevDebugContainer.php",
            "line": 1472,
            "args": [
                [
                    "object",
                    "ContainerS6UD7jI\\App_KernelDevDebugContainer"
                ],
                [
                    "boolean",
                    true
                ]
            ]
        },
        {
            "namespace": "ContainerS6UD7jI",
            "short_class": "App_KernelDevDebugContainer",
            "class": "ContainerS6UD7jI\\App_KernelDevDebugContainer",
            "type": "->",
            "function": "load",
            "file": "\/var\/www\/html\/var\/cache\/dev\/ContainerS6UD7jI\/getCreateController19Service.php",
            "line": 26,
            "args": [
                [
                    "string",
                    "getTranslatorServiceInterfaceService.php"
                ]
            ]
        },
        {
            "namespace": "ContainerS6UD7jI",
            "short_class": "getCreateController19Service",
            "class": "ContainerS6UD7jI\\getCreateController19Service",
            "type": "::",
            "function": "do",
            "file": "\/var\/www\/html\/var\/cache\/dev\/ContainerS6UD7jI\/App_KernelDevDebugContainer.php",
            "line": 1472,
            "args": [
                [
                    "object",
                    "ContainerS6UD7jI\\App_KernelDevDebugContainer"
                ],
                [
                    "boolean",
                    true
                ]
            ]
        },
        {
            "namespace": "ContainerS6UD7jI",
            "short_class": "App_KernelDevDebugContainer",
            "class": "ContainerS6UD7jI\\App_KernelDevDebugContainer",
            "type": "->",
            "function": "load",
            "file": "\/var\/www\/html\/vendor\/symfony\/dependency-injection\/Container.php",
            "line": 221,
            "args": [
                [
                    "string",
                    "getCreateController19Service.php"
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\DependencyInjection",
            "short_class": "Container",
            "class": "Symfony\\Component\\DependencyInjection\\Container",
            "type": "::",
            "function": "make",
            "file": "\/var\/www\/html\/vendor\/symfony\/dependency-injection\/Container.php",
            "line": 203,
            "args": [
                [
                    "object",
                    "ContainerS6UD7jI\\App_KernelDevDebugContainer"
                ],
                [
                    "string",
                    "Pimcore\\Bundle\\StudioBackendBundle\\Translation\\Controller\\CreateController"
                ],
                [
                    "integer",
                    1
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\DependencyInjection",
            "short_class": "Container",
            "class": "Symfony\\Component\\DependencyInjection\\Container",
            "type": "->",
            "function": "get",
            "file": "\/var\/www\/html\/vendor\/symfony\/http-kernel\/Controller\/ContainerControllerResolver.php",
            "line": 38,
            "args": [
                [
                    "string",
                    "Pimcore\\Bundle\\StudioBackendBundle\\Translation\\Controller\\CreateController"
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\HttpKernel\\Controller",
            "short_class": "ContainerControllerResolver",
            "class": "Symfony\\Component\\HttpKernel\\Controller\\ContainerControllerResolver",
            "type": "->",
            "function": "instantiateController",
            "file": "\/var\/www\/html\/vendor\/symfony\/framework-bundle\/Controller\/ControllerResolver.php",
            "line": 25,
            "args": [
                [
                    "string",
                    "Pimcore\\Bundle\\StudioBackendBundle\\Translation\\Controller\\CreateController"
                ]
            ]
        },
        {
            "namespace": "Symfony\\Bundle\\FrameworkBundle\\Controller",
            "short_class": "ControllerResolver",
            "class": "Symfony\\Bundle\\FrameworkBundle\\Controller\\ControllerResolver",
            "type": "->",
            "function": "instantiateController",
            "file": "\/var\/www\/html\/vendor\/symfony\/http-kernel\/Controller\/ControllerResolver.php",
            "line": 127,
            "args": [
                [
                    "string",
                    "Pimcore\\Bundle\\StudioBackendBundle\\Translation\\Controller\\CreateController"
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\HttpKernel\\Controller",
            "short_class": "ControllerResolver",
            "class": "Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver",
            "type": "->",
            "function": "createController",
            "file": "\/var\/www\/html\/vendor\/symfony\/http-kernel\/Controller\/ControllerResolver.php",
            "line": 95,
            "args": [
                [
                    "string",
                    "Pimcore\\Bundle\\StudioBackendBundle\\Translation\\Controller\\CreateController::createTranslations"
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\HttpKernel\\Controller",
            "short_class": "ControllerResolver",
            "class": "Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver",
            "type": "->",
            "function": "getController",
            "file": "\/var\/www\/html\/vendor\/symfony\/http-kernel\/Controller\/TraceableControllerResolver.php",
            "line": 33,
            "args": [
                [
                    "object",
                    "Symfony\\Component\\HttpFoundation\\Request"
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\HttpKernel\\Controller",
            "short_class": "TraceableControllerResolver",
            "class": "Symfony\\Component\\HttpKernel\\Controller\\TraceableControllerResolver",
            "type": "->",
            "function": "getController",
            "file": "\/var\/www\/html\/vendor\/symfony\/http-kernel\/HttpKernel.php",
            "line": 166,
            "args": [
                [
                    "object",
                    "Symfony\\Component\\HttpFoundation\\Request"
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\HttpKernel",
            "short_class": "HttpKernel",
            "class": "Symfony\\Component\\HttpKernel\\HttpKernel",
            "type": "->",
            "function": "handleRaw",
            "file": "\/var\/www\/html\/vendor\/symfony\/http-kernel\/HttpKernel.php",
            "line": 76,
            "args": [
                [
                    "object",
                    "Symfony\\Component\\HttpFoundation\\Request"
                ],
                [
                    "integer",
                    1
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\HttpKernel",
            "short_class": "HttpKernel",
            "class": "Symfony\\Component\\HttpKernel\\HttpKernel",
            "type": "->",
            "function": "handle",
            "file": "\/var\/www\/html\/vendor\/symfony\/http-kernel\/Kernel.php",
            "line": 193,
            "args": [
                [
                    "object",
                    "Symfony\\Component\\HttpFoundation\\Request"
                ],
                [
                    "integer",
                    1
                ],
                [
                    "boolean",
                    true
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\HttpKernel",
            "short_class": "Kernel",
            "class": "Symfony\\Component\\HttpKernel\\Kernel",
            "type": "->",
            "function": "handle",
            "file": "\/var\/www\/html\/vendor\/symfony\/runtime\/Runner\/Symfony\/HttpKernelRunner.php",
            "line": 34,
            "args": [
                [
                    "object",
                    "Symfony\\Component\\HttpFoundation\\Request"
                ]
            ]
        },
        {
            "namespace": "Symfony\\Component\\Runtime\\Runner\\Symfony",
            "short_class": "HttpKernelRunner",
            "class": "Symfony\\Component\\Runtime\\Runner\\Symfony\\HttpKernelRunner",
            "type": "->",
            "function": "run",
            "file": "\/var\/www\/html\/vendor\/autoload_runtime.php",
            "line": 32,
            "args": []
        },
        {
            "namespace": "",
            "short_class": "",
            "class": "",
            "type": "",
            "function": "require_once",
            "file": "\/var\/www\/html\/public\/index.php",
            "line": 16,
            "args": [
                [
                    "string",
                    "\/var\/www\/html\/vendor\/autoload_runtime.php"
                ]
            ]
        }
    ]
}

/home/pimcore-studio/config
[root@update-pimcore config]# cat config.yaml
imports:
    - { resource: 'local/' }


pimcore_enterprise_subscription_tools:
    token: 'xxxxxx'
    # Set to true on production systems, otherwise to false. Only 1 prod system allowed.
    production_system: false

pimcore:
    config_location:
        system_settings:
            write_target:
                #type: 'settings-store'
                type: 'symfony-config'
            read_target:
                #type: 'settings-store'
                type: 'symfony-config'


# IMPORTANT Notice!
# Following there are only some examples listed, for a full list of possible options, please run the following command:
# ./bin/console debug:config pimcore
# you can also filter them by path, eg.
# ./bin/console debug:config pimcore assets
# or even more specific:
# ./bin/console debug:config pimcore assets.image


#### TRANSLATIONS
#    translations:
#        case_insensitive: true

#### FEATURE FLAGS
#    flags:
#        zend_date: true

#### CLASS OVERRIDES EXAMPLES
#    models:
#        class_overrides:
#            'Pimcore\Model\DataObject\News': 'App\Model\DataObject\News'
#            'Pimcore\Model\DataObject\News\Listing': 'App\Model\DataObject\News\Listing'
#            'Pimcore\Model\DataObject\Folder': 'App\Model\DataObject\Folder'
#            'Pimcore\Model\Asset\Folder': 'App\Model\Asset\Folder'
#            'Pimcore\Model\Asset\Image': 'App\Model\Asset\Image'
#            'Pimcore\Model\Document\Page': 'App\Model\Document\Page'
#            'Pimcore\Model\Document\Link': 'App\Model\Document\Link'
#            'Pimcore\Model\Document\Listing': 'App\Model\Document\Listing'


#### CUSTOM DOCUMENT EDITABLES
#    documents:
#        allow_trailing_slash: 'yes'
#        generate_preview: false
#        tags:
#            map:
#                markdown: \App\Model\Document\Tag\Markdown


#### CUSTOM OBJECT DATA TYPES
#    objects:
#        class_definitions:
#            data:
#                map:
#                  myDataType: \App\Model\DataObject\Data\MyDataType


#### ASSET CUSTOM SETTINGS
#    assets:
#        icc_rgb_profile: ''
#        icc_cmyk_profile: ''
#        versions:
#            use_hardlinks: false
#        image:
#            low_quality_image_preview:
#                enabled: false
#                generator: imagick
#            thumbnails:
#                webp_auto_support: false


#### SYSTEM SETTINGS

#    general:
#        timezone: Europe/Berlin
#        path_variable: ''
#        instance_identifier: ''
#    full_page_cache:
#        enabled: false
#        lifetime: null
#        exclude_cookie: ''
#        exclude_patterns: ''
#    httpclient:
#        adapter: Socket # use 'Proxy' for custom proxy configuration
#        proxy_host: ''
#        proxy_port: ''
#        proxy_user: ''
#        proxy_pass: ''
    assets:

        document:
            scan_pdf: false
    email:
        sender:
            name: 'notification'
            email: notification@xxxx.com
#        return:
#            name: ''
#            email: ''

#    applicationlog:
#        mail_notification:
#            send_log_summary: false
#            filter_priority: null
#            mail_receiver: ''
#        archive_treshold: '30'
#        archive_alternative_database: ''

#### SYMFONY OVERRIDES
framework:
#    WHEN RUNNING PIMCORE AND OTHER APPLICATIONS ON SAME DOMAIN, SET SESSION COOKIE NAME TO PROVIDE COLLISION
#    session:
#        name: "PIMCORE_SESSION_ID"

#### DEFINE LOCATION OF MANIFEST WHEN WORKING WITH SYMFONY ENCORE
#    assets:
#        json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'

#### USE CUSTOM CACHE POOL
#    cache:
#        pools:
#            pimcore.cache.pool:
#                public: true
#                default_lifetime: 31536000  # 1 year
#                adapter: cache.adapter.redis_tag_aware
#                provider: 'redis://localhost' # Redis DNS, see: https://symfony.com/doc/current/components/cache/adapters/redis_adapter.html#configure-the-connection

#### USE SESSION HANDLER CONFIGURED IN php.ini
#    session:
#        handler_id: null

#### SYMFONY MAILER TRANSPORTS
    mailer:
        transports:
            main: '%env(MAILER_DSN)%'

#    mailer:
#        transports:
#            main: smtp://user:pass@smtp.example.com:port
#            pimcore_newsletter: smtp://user:pass@smtp.example.com:port

# pimcore_newsletter:
#     default_url_prefix: 'https://my-host.com' # default prefix for your static assets
#     use_specific: false # set true to use the following options for newsletter delivery
#     sender:
#         name: ''
#         email: ''
#     return:
#         name: ''
#         email: ''

#    cache:
#        pools:
#            pimcore.cache.pool:
#                public: true
#                default_lifetime: 31536000  # 1 year
#                adapter: cache.adapter.redis_tag_aware
#                provider: 'redis://redis:6379' # Redis DNS, see: https://symfony.com/doc/current/components/cache/adapters/redis_adapter.html#configure-the-connection

    #session:
        #handler_id: 'redis://redis:6379'   # 直接用 DSN 字符串
        #handler_id: %env(REDIS_DSN)%
        #cookie_secure: auto
        #cookie_samesite: lax

pimcore_data_hub:
    graphql:
        output_cache_enabled: true    # Enables/disables the output (responses) cache
        output_cache_lifetime: 3600     # If enabled, for how many seconds each response will be cached


# Configuring an OpenSearch client
pimcore_open_search_client:
    clients:
        default:
            hosts: ['https://opensearch:9200']
            username: 'admin'
            password: 'xxx'
            ssl_verification: false
            logger_channel: pimcore.opensearch

# Define the client to be used by your bundle
pimcore_generic_data_index:
    index_service:
        client_params:
            client_name: default
        queue_settings:
            worker_count: 5
            min_batch_size: 5
            max_batch_size: 15


pimcore_studio_backend:
    mercure_settings:
        jwt_key: ''
        hub_url_client: 'https://updatepimcore.xxx.com/hub'
        hub_url_server: 'http://mercure/.well-known/mercure'
    rate_limiting:
        enabled: false

pimcore_studio_ui:
    url_path: '/pimcore-studio'
    csp_header:
        enabled: false

pimcore_admin:
    config_location:
        admin_system_settings:
            write_target:
                #type: 'settings-store'
                type: 'symfony-config'
            read_target:
                #type: 'settings-store'
                type: 'symfony-config'

Actual Behavior

update

Expected Behavior

can save

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Platform Version

    2025.4 - LTS

    Affected capability

    Other

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions