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
 
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.