Ošetření formuláře captchou

scientific
Člen | 94
+
0
-

Ahoj, všem, na jiném projektu používáme catchu, chtěl jsem tu captchu použít i pro tento projekt, mám však zádrhel v její implementaci.

Znění chybovky:

Fatal Error

Class 'App\Forms\Securimage' not found

Kód způsobující chybovku je zakomentován, konkrétně řádek, kde se vytváří instance třídy Secureimage:

public function success(Form $form, $values)
	{
        // include_once(dirname(__FILE__)."/../../www/securimage/securimage.php");
		// $securimage = new Securimage();
		// if (!$securimage->check($_POST['captcha_code'])) {
            // $form->addError("E_CAPTCHA");
            // return;
        // }

        try {
            $user = $this->parent->getUser();

Pro jistotu zmíním, že cesta ke třídě je uvedena správně.

Jak by se prosím dalo zařídit, aby nette přestalo blbnout s nějakým „App\Forms\Securimage“, a fungovala includovana třída securimage.php

Díky za rady.

Editoval scientific (4. 1. 2021 13:33)

David Matějka
Moderator | 6445
+
+5
-

ahoj,

  1. ta chyba nesouvisí s nette. doporucuju nastudovat, jak funguji namespaces: https://www.php.net/…mespaces.php, pokud nemas Securimage v use ani neuvádíš FQN, tak se PHP snaží třídu hledat v aktuálním namespace
  2. preferoval bych nějakou normální moderní captchu, jako je google recaptcha
  3. pokud bys ji i tak chtěl použít, nechá se nainstalovat přes composer https://packagist.org/…p/securimage
scientific
Člen | 94
+
0
-

Vím, jak fungují jmenné prostory, jen jsem si toho nevšiml. Já je nepoužívám, v jednom projektu jmenný prostor byl a ve druhém ne, tak jsem si nevšiml.

Secureimage a jednu další jeho třídu jsem přidal do namespace a funguje, děkuji pěkně.