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.