|string> */ public function rules(): array { return SettingsSchema::rules(); } /** * Reject keys the schema does not know about instead of persisting them. * * @return array */ public function after(): array { return [ function (Validator $validator): void { $this->rejectUnknownKeys( $validator, 'settings', (array) $this->input('settings', []), SettingsSchema::allowedKeys(), ); $floatingLines = $this->input('settings.floatingLines'); if (is_array($floatingLines)) { $this->rejectUnknownKeys( $validator, 'settings.floatingLines', $floatingLines, SettingsSchema::allowedFloatingLineKeys(), ); } }, ]; } /** * @param array $given * @param array $allowed */ private function rejectUnknownKeys( Validator $validator, string $attribute, array $given, array $allowed, ): void { $unknown = array_diff(array_keys($given), $allowed); if ($unknown === []) { return; } $validator->errors()->add( $attribute, 'Unknown settings keys: '.implode(', ', array_map('strval', $unknown)).'.', ); } }