Proč RobotLoader pouívá require namísto require_once aneb Cannot redefine class

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
CZechBoY
Člen | 3608
+
0
-

Zdravím,
dostal jsem se do hodně zajímavé situace, kdy RobotLoader načítá dvakrát jeden soubor a php mi tedy hodí chybu Cannot redaclare class App\AbcModule\Forms\SignForm.
Mám třídu App\Forms\SignForm + k ní factory.
Potřebuju tuhle třídu + továrničku přetížit, aby měla jiný validační pravidlo.
Nemám to přes interface tak prostě dědím ten původní formulář a do DIC uvedu jen ten přetížený.

namespace App\AbcModule\Forms;

class SignForm extends \App\Forms\SignForm
{
	// pokud odeberu SignForm v typehintu tak to jede ok
	public function formSucceeded (SignForm $form, ArrayHash $values)
	{
		// ...
	}
}

interface ISignFormFactory extends \App\Forms\ISignFormFactory
{
	/** @return SignForm */
	function create();
}
class SignPresenter extends BasePresenter
{
	/** @inject @var \App\Forms\ISignFormFactory */ // inject té původní
	public $factory;
	// + k tomu createComponent klasicky
}

Výpis tříd, které RobotLoader načítá v tryLoad($type):
echo $type
`

app\abcmodule\forms\isignformfactory
app\forms\signform
app\abcmodule\forms\signform
`

Existuje nějaký lepší způsob než v tom problematickém typehintu vyžadovat nějakého jiného předka (např UI\Form)?
Díky za rady.

Caine
Člen | 216
+
0
-

Zkousel jsi smazat cache?

abc
Člen | 92
+
+1
-

Ten interface asi nemusí dědit od \App\Forms\ISignFormFactory

CZechBoY
Člen | 3608
+
0
-

@abc: v presenteru vyžaduju \App\Forms\ISignFormFactory takže moje nová továrna musí dědit od té původní, jinak by se neinjectnula.
@Caine jj, jedu na debug režimu (+mazal jsem temp/cache nejmíň 10× :-))