Include/Require nefunguje

scientific
Člen | 93
+
0
-

Ve formuláři mám formulář, ke kterém se snažím dát captchu po vzoru druhého (staršího) Nette webu.

public function success(Form $form, $values)
	{
        require_once(dirname(__FILE__)."/../../www/securimage/securimage.php");
		$securimage = new Securimage();

Snažím se inicializovat třídu, ale Nette tvrdí, že ta třída v Nette neexistuje (Class ‚App\Forms\Securimage‘ not found search►), což je fakt, ale to nikdo netvrdí. Ta třída existuje právě v require_once(dirname(__FILE__).„/../../www/securimage/securimage.php“);

Jak to prosím zařídit, ideálně co nejjednodušeji, je to externí třída mimo Nette, není důvod ji cpát za každou cenu do nette, dělat z ní model apod.

Editoval scientific (3. 10. 2022 10:10)

Marek Bartoš
Nette Blogger | 1171
+
+1
-

A jaký má ta třída namespace? Vypadá to, že jen načítáš soubor s ní, ale už ji neimportuješ (přes use)

Pepino
Člen | 249
+
+3
-

Tipuju stačí lomítko před název třídy:

$securimage = new \Securimage();
Petr Parolek
Člen | 455
+
0
-

Ahoj, doporučoval bych PHP kod načítat moderně přes composer z adresáře např. /libs a nepoužívat include či require.

scientific
Člen | 93
+
0
-

Pepino napsal(a):

Tipuju stačí lomítko před název třídy:

$securimage = new \Securimage();

Perfektní, funguje perfektně, děkuji.

Ale proč tomu tak je? Jak to zpětné lomítku funguje, jakou na pozadí plní úlohu, jak se tomu říká, abych si k tomu mohl dohledat nějaké informace? Děkuji.

Martin Dřímal
Člen | 16
+
0
-

scientific napsal(a):

Pepino napsal(a):

Tipuju stačí lomítko před název třídy:

$securimage = new \Securimage();

Perfektní, funguje perfektně, děkuji.

Ale proč tomu tak je? Jak to zpětné lomítku funguje, jakou na pozadí plní úlohu, jak se tomu říká, abych si k tomu mohl dohledat nějaké informace? Děkuji.

Máš tam Nějaký\Namespace a v něm includuješ třídu, která namespace nemá, takže new Securimage se hledá v tom lokálním pod Nějaký\Namespace\Securimage a new \SecurImage se hledá globálně / v „rootu“ namespace. Namespaces si můžeš představit jako složku, prostě jsi tu třídu hledal ve „složce“, ve které není.
https://www.php.net/…mespaces.php

Editoval Martin Dřímal (3. 10. 2022 12:01)