octobercms/october · error · Error

Object list value should be an object. Property: ${this.prop

Error message

Object list value should be an object. Property: ${this.propertyDefinition.property}

What it means

SnippetLookup::onGetInspectorConfiguration reads the `component` POST parameter and calls class_exists on it before anything else. A non-empty component string that does not name an existing class throws this ApplicationException with the class name substituted for :code. It guards the inspector from generating a configuration UI for a PHP component class that is no longer present.

Source

Thrown at modules/backend/assets/foundation/controls/inspector/inspector.editor.objectlist.js:101

                link.textContent = placeholder
            }
            else {
                link.textContent = 'Items: 0'
            }
        }
        else {
            var itemCount = 0

            if (!this.isKeyValueMode()) {
                if (value.length === undefined) {
                    throw new Error('Object list value should be an array. Property: ' + this.propertyDefinition.property)
                }

                itemCount = value.length
            }
            else {
                if (typeof value !== 'object') {
                    throw new Error('Object list value should be an object. Property: ' + this.propertyDefinition.property)
                }

                itemCount = this.getValueKeys(value).length
            }

            $.oc.foundation.element.removeClass(link, 'cell-placeholder')
            link.textContent = 'Items: ' + itemCount
        }
    }

    ObjectListEditor.prototype.getPopupContent = function() {
        return '<form>                                                                                     \
                <div class="modal-header">                                                                 \
                    <h4 class="modal-title">{{property}}</h4>                                              \
                    <button type="button" class="btn-close" data-dismiss="popup"></button>                 \
                </div>                                                                                     \
                <div>                                                                                      \
                    <div class="layout inspector-columns-editor">                                          \

View on GitHub (pinned to b608633a7e)

Solutions

  1. Verify the fully-qualified class name in the request matches an existing class (check namespace and casing).
  2. Reload the backend page / close and reopen the snippet editor so the UI stops posting the stale component name.
  3. If a plugin was removed, delete or re-save the theme content that still embeds its snippet component.

Example fix

// before
oc.request(el, 'onGetInspectorConfiguration', {
    data: { component: 'Acme\\Blog\\Components\\FeaturedPosts' }
});

// after (class was renamed to PostList)
oc.request(el, 'onGetInspectorConfiguration', {
    data: { component: 'Acme\\Blog\\Components\\PostList' }
});
Defensive patterns

Strategy: try-catch

Validate before calling

// Server-side, before asking the widget for inspector config
if ($componentClass && !class_exists($componentClass)) {
    // skip the request; refresh the editor UI instead of posting a dead class name
    return ['error' => 'unknown component: '.$componentClass];
}

Try / catch

// Client side via oc.request
oc.request(el, 'onGetInspectorConfiguration', { data }).catch(err => {
    // ApplicationException arrives as an error flash / X_OCTOBER_ERROR_MESSAGE
    console.warn(err.message ?? 'Snippet component not found');
});

Prevention

When it happens

Trigger: An AJAX request to `snippetlookup::onGetInspectorConfiguration` with `component: 'Acme\Blog\Components\Gone'` where that class does not exist (renamed, moved namespace, plugin removed, typo in the request).

Common situations: Renaming or deleting a component class while an editor session still references the old name; disabling/uninstalling a plugin whose snippets are still placed in a theme; stale browser state re-posting an old inspector request after a deploy.

Related errors


AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21). Data as JSON: /api/errors/0f7954d8fa614330. Report an issue: GitHub.