octobercms/october · warning · Error

Object list value should be an array. Property: ${this.prope

Error message

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

What it means

When the lookup type is 'url', PageLookupItem::isValidUrl must accept the submitted `url` value (it accepts strings starting with '#', '/', 'http://', 'https://', or mailto/tel/sms:, and otherwise falls back to PHP's FILTER_VALIDATE_URL). Missing `url` or an unparseable value throws this ValidationException — note it is attached to the `reference` field, so the popup highlights reference rather than the URL input.

Source

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

        }

        if (value === undefined) {
            var placeholder = this.propertyDefinition.placeholder

            if (placeholder !== undefined) {
                $.oc.foundation.element.addClass(link, 'cell-placeholder')
                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() {

View on GitHub (pinned to b608633a7e)

Solutions

  1. Enter a full URL: `https://example.com/about`, or a root-relative path `/about`, or an anchor `#section`.
  2. For email/phone links use the recognized schemes: `mailto:me@example.com`, `tel:+15551234`.
  3. If the popup inserts programmatically, set `PageLookupItem.url` to a value starting with '/', '#', or http(s)://.

Example fix

// before
oc.request(el, 'pagelookup::onInsertReference', {
    data: { PageLookupItem: { type: 'url', url: 'example.com/about' } }
});

// after
oc.request(el, 'pagelookup::onInsertReference', {
    data: { PageLookupItem: { type: 'url', url: 'https://example.com/about' } }
});
Defensive patterns

Strategy: validation

Validate before calling

// Mirror of PageLookupItem::isValidUrl (modules/cms/models/PageLookupItem.php:604)
function isValidLinkUrl(path) {
    return /^(#|\/|https?:\/\/|(mailto|tel|sms):)/.test(path);
}

Try / catch

try {
    $widget->onInsertReference();
} catch (ValidationException $e) {
    if (isset($e->getErrors()['reference'])) {
        // URL rejected — prompt for scheme or leading slash
    }
}

Prevention

When it happens

Trigger: Submitting type 'url' with `PageLookupItem[url]` absent, empty, or scheme-less like 'example.com/about' (no leading '/', no http://). Typing 'mailto:' alone without an address also fails the regex and the filter.

Common situations: Users typing bare domain names without a scheme; forgetting that relative URLs must start with '/'; programmatic inserts that pass only type and reference for URL links.

Related errors


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