new ComponentPropertyMetadata( name: 'initialValue', type: 'int', isPublic: true, isReadonly: false ) ], actions: [], constructorParams: [] ); echo "Metadata properties: " . implode(', ', array_keys($metadata->properties)) . "\n\n"; // Test 1: Valid prop echo "=== Test 1: Check valid prop 'initialValue' ===\n"; $has = $metadata->hasProperty('initialValue'); echo "hasProperty('initialValue'): " . ($has ? 'true' : 'false') . "\n\n"; // Test 2: Invalid prop echo "=== Test 2: Check invalid prop 'id' ===\n"; $has = $metadata->hasProperty('id'); echo "hasProperty('id'): " . ($has ? 'true' : 'false') . "\n\n"; // Test 3: Simulate validation logic from XComponentProcessor echo "=== Test 3: Simulate XComponentProcessor validation logic ===\n"; $props = ['id' => 'demo', 'initialValue' => '5']; echo "Props to validate: " . json_encode($props) . "\n"; foreach ($props as $propName => $value) { // Skip 'id' - it's used for ComponentId, not a component property if ($propName === 'id') { echo " → Skipping 'id' (used for ComponentId)\n"; continue; } if (! $metadata->hasProperty($propName)) { echo " → ERROR: Property '{$propName}' not found in metadata!\n"; $propertyNames = array_keys($metadata->properties); echo " Available: " . implode(', ', $propertyNames) . "\n"; } else { echo " → OK: Property '{$propName}' exists\n"; } }