/** * Register an extension. * * @param array $attributes * @return $this * @throws \Exception */ public function register(array $attributes) { $validator = $this->getValidationFactory()->make($attributes, ['type' => 'required', 'name' => 'required', 'parameters.class' => 'required_if:type,widget', 'parameters.templates' => 'required_if:type,widget', 'parameters.template' => 'required_if:type,menu']); if ($validator->fails()) { throw new InvalidManifestException("Invalid manifest file detected!"); } $extension = new Extension(); $extension->type = $attributes['type']; $extension->name = $attributes['name']; if (isset($attributes['protected'])) { $extension->protected = $attributes['protected']; } if (isset($attributes['parameters'])) { $extension->parameters = $attributes['parameters']; } $extension->manifest = json_encode($attributes); $extension->save(); return $this; }