public function __construct(array $config) { Config::validate($config, ['name' => Config::STRING, 'fields' => Config::arrayOf(FieldDefinition::getDefinition(), Config::KEY_AS_NAME), 'resolveType' => Config::CALLBACK, 'description' => Config::STRING]); $this->name = $config['name']; $this->description = isset($config['description']) ? $config['description'] : null; $this->_fields = !empty($config['fields']) ? FieldDefinition::createMap($config['fields']) : []; $this->_resolveTypeFn = isset($config['resolveType']) ? $config['resolveType'] : null; }
/** * @return FieldDefinition[] */ public function getFields() { if (null === $this->fields) { $this->fields = []; $fields = isset($this->config['fields']) ? $this->config['fields'] : []; $fields = is_callable($fields) ? call_user_func($fields) : $fields; $this->fields = FieldDefinition::createMap($fields, $this->name); } return $this->fields; }
public function __construct(array $config) { Config::validate($config, ['name' => Config::STRING | Config::REQUIRED, 'fields' => Config::arrayOf(FieldDefinition::getDefinition(), Config::KEY_AS_NAME), 'description' => Config::STRING, 'interfaces' => Config::arrayOf(Config::INTERFACE_TYPE), 'isTypeOf' => Config::CALLBACK]); $this->name = $config['name']; $this->description = isset($config['description']) ? $config['description'] : null; if (isset($config['fields'])) { $this->_fields = FieldDefinition::createMap($config['fields']); } $this->_interfaces = isset($config['interfaces']) ? $config['interfaces'] : []; $this->_isTypeOf = isset($config['isTypeOf']) ? $config['isTypeOf'] : null; if (!empty($this->_interfaces)) { InterfaceType::addImplementationToInterfaces($this, $this->_interfaces); } }
/** * Late instance initialization */ private function initialize() { if ($this->_initialized) { return; } $config = $this->_config; if (isset($config['fields']) && is_callable($config['fields'])) { $config['fields'] = call_user_func($config['fields']); } if (isset($config['interfaces']) && is_callable($config['interfaces'])) { $config['interfaces'] = call_user_func($config['interfaces']); } // Note: this validation is disabled by default, because it is resource-consuming // TODO: add bin/validate script to check if schema is valid during development Config::validate($this->_config, ['name' => Config::STRING | Config::REQUIRED, 'fields' => Config::arrayOf(FieldDefinition::getDefinition(), Config::KEY_AS_NAME), 'description' => Config::STRING, 'interfaces' => Config::arrayOf(Config::INTERFACE_TYPE), 'isTypeOf' => Config::CALLBACK, 'resolveField' => Config::CALLBACK]); $this->_fields = FieldDefinition::createMap($config['fields']); $this->_interfaces = isset($config['interfaces']) ? $config['interfaces'] : []; $this->_isTypeOf = isset($config['isTypeOf']) ? $config['isTypeOf'] : null; $this->_initialized = true; }