octobercms/october · error · ApplicationException

The property name is not specified.

Error message

The property name is not specified.

What it means

Thrown by the InspectableContainer::onInspectableGetOptions backend AJAX handler when the request carries no non-empty inspectorProperty POST field. The Inspector UI posts this field automatically when a property editor with dynamic options (e.g. a dropdown with dynamicOptions enabled) asks the server for its option list. An empty value almost always means the inspector control schema is missing the `property` key, so the frontend has nothing meaningful to send.

Source

Thrown at modules/backend/traits/InspectableContainer.php:25

 * InspectableContainer is an extension for controllers that can host
 * inspectable widgets (Components, etc.)
 *
 * @package october\backend
 * @author Alexey Bobkov, Samuel Georges
 */
trait InspectableContainer
{
    /**
     * onInspectableGetOptions
     */
    public function onInspectableGetOptions()
    {
        // Disable asset broadcasting
        $this->flushAssets();

        $property = trim(post('inspectorProperty'));
        if (!$property) {
            throw new ApplicationException('The property name is not specified.');
        }

        $className = trim(post('inspectorClassName'));
        if (!$className || $className === 'undefined') {
            throw new ApplicationException('The inspectable class name is not specified.');
        }

        $traitFound = in_array(\System\Traits\PropertyContainer::class, class_uses_recursive($className));
        if (!$traitFound) {
            throw new ApplicationException('Dynamic Inspector control options cannot be loaded for the specified class.');
        }

        $obj = new $className(null);
        $obj->setProperties(post());

        // Nested properties have names like object.property.
        // Convert them to Object.Property.
        $propertyNameParts = explode('.', $property);

View on GitHub (pinned to b608633a7e)

Solutions

  1. Add the `property` key to the offending inspector control definition, e.g. { property: 'size', title: 'Size', type: 'dropdown', dynamicOptions: true }.
  2. If you call onInspectableGetOptions manually, include a non-empty inspectorProperty value in the POST body.
  3. Inspect the rendered schema (or browser devtools network tab) to find the request with the missing field and fix that specific control.
  4. Clear browser/asset caches after fixing so the corrected schema is served.

Example fix

// before
{ title: 'Size', type: 'dropdown', dynamicOptions: true }

// after
{ property: 'size', title: 'Size', type: 'dropdown', dynamicOptions: true }
Defensive patterns

Strategy: validation

Validate before calling

// Before letting a control request dynamic options
const property = (control.property || '').trim();
if (!property) {
    console.error('Inspector control missing property key:', control);
    return;
}
const payload = {
    inspectorProperty: property,
    inspectorClassName: this.serverClassName
};

Type guard

function hasInspectorProperty(control) {
    return typeof control.property === 'string' && control.property.trim().length > 0;
}

Prevention

When it happens

Trigger: A POST request to a controller using InspectableContainer hits onInspectableGetOptions with inspectorProperty absent, empty, or whitespace-only. Typical producer: an inspector data-schema entry like {title:'Size', type:'dropdown', dynamicOptions:true} that omits `property`, or custom JavaScript invoking the handler directly without the field.

Common situations: Custom inspector controls or CMS component inspector schemas in a plugin that forget the `property` key; copy-pasted control definitions where the property line was dropped; hand-rolled AJAX calls to the handler from tests or custom JS; a computed property name that resolves to an empty string.

Related errors


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