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
- Verify the fully-qualified class name in the request matches an existing class (check namespace and casing).
- Reload the backend page / close and reopen the snippet editor so the UI stops posting the stale component name.
- 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
- After renaming or moving a component class, hard-refresh the backend page so stale inspector requests stop.
- Remove or re-save theme content that still references uninstalled plugin components.
- Use fully-qualified class names with correct casing in snippet/component registrations.
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
- Values not found for the selected row.
- Trying to get selected row without a popup reference.
- The titleProperty property should be specified in the object
- The itemProperties property should be specified in the objec
- Object list key property ${this.propertyDefinition.keyProper
AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21).
Data as JSON: /api/errors/0f7954d8fa614330.
Report an issue: GitHub.