values = $values; $this->filter = $filter; } public function handle($query, $nextFilter) { $query = $nextFilter($query); if(static::validate($this->values) === false) { return $query; } return static::apply($query); } abstract protected function apply($query): Builder; abstract protected function validate($value): bool; }