options['captcha'])) { $this->setCaptcha($this->options['captcha']); } return $this; } /** * Set captcha * * @param iterable|LaminasCaptcha\AdapterInterface $captcha * @throws Exception\InvalidArgumentException * @return $this */ public function setCaptcha($captcha) { if (is_iterable($captcha)) { $captcha = LaminasCaptcha\Factory::factory($captcha); } elseif (! $captcha instanceof LaminasCaptcha\AdapterInterface) { throw new Exception\InvalidArgumentException(sprintf( '%s expects either a Laminas\Captcha\AdapterInterface or specification' . ' to pass to Laminas\Captcha\Factory; received "%s"', __METHOD__, is_object($captcha) ? $captcha::class : gettype($captcha) )); } $this->captcha = $captcha; return $this; } /** * Retrieve captcha (if any) */ public function getCaptcha(): ?LaminasCaptcha\AdapterInterface { return $this->captcha; } /** * Provide default input rules for this element * * Attaches the captcha as a validator. * * @inheritDoc */ public function getInputSpecification(): array { $spec = [ 'required' => true, 'filters' => [ ['name' => StringTrim::class], ], ]; $name = $this->getName(); if ($name !== null) { $spec['name'] = $name; } // Test that we have a captcha before adding it to the spec $captcha = $this->getCaptcha(); if ($captcha instanceof LaminasCaptcha\AdapterInterface) { $spec['validators'] = [$captcha]; } return $spec; } }