* @link https://getkirby.com * @copyright Bastian Allgeier * @license https://getkirby.com/license */ class Section extends Component { /** * Registry for all component mixins * * @var array */ public static $mixins = []; /** * Registry for all component types * * @var array */ public static $types = []; /** * Section constructor. * * @param string $type * @param array $attrs * @throws \Kirby\Exception\InvalidArgumentException */ public function __construct(string $type, array $attrs = []) { if (isset($attrs['model']) === false) { throw new InvalidArgumentException('Undefined section model'); } if (is_a($attrs['model'], 'Kirby\Cms\Model') === false) { throw new InvalidArgumentException('Invalid section model'); } // use the type as fallback for the name $attrs['name'] ??= $type; $attrs['type'] = $type; parent::__construct($type, $attrs); } public function errors(): array { if (array_key_exists('errors', $this->methods) === true) { return $this->methods['errors']->call($this); } return $this->errors ?? []; } /** * @return \Kirby\Cms\App */ public function kirby() { return $this->model()->kirby(); } /** * @return \Kirby\Cms\Model */ public function model() { return $this->model; } /** * @return array */ public function toArray(): array { $array = parent::toArray(); unset($array['model']); return $array; } /** * @return array */ public function toResponse(): array { return array_merge([ 'status' => 'ok', 'code' => 200, 'name' => $this->name, 'type' => $this->type ], $this->toArray()); } }