Ambiguous class, stejna cesta, obracene lomitko

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

Ahoj,

zacinam si hrat s Nette testerem, ale pomerne brzy jsem se zasekl.

Mam strukturu

app
   -IntraModule
       - forms
       - presenters
       - ...
   - presenters
   - config
   - ...

Testovaci Bootstrap takto:

require __DIR__ . '/../vendor/autoload.php';

Tester\Environment::setup();

$configurator = new Nette\Configurator;
$configurator->setDebugMode(FALSE);
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
	->addDirectory(__DIR__ . '/../app')
        ->addDirectory(__DIR__ . '/../app/IntraModule')
	->register();

$configurator->addConfig(__DIR__ . '/../app/config/config.neon');
$configurator->addConfig(__DIR__ . '/../app/config/config.local.neon');
return $configurator->createContainer();

Bez pridani /../app/IntraModule mi tester nenajde SignPresenter.

V ExampleTest:

	function testSignIn()
	{
$presenterFactory = $this->container->getByType('Nette\Application\IPresenterFactory');
$presenter = $presenterFactory->createPresenter('Sign');
$presenter->autoCanonicalize = FALSE;

$request = new Nette\Application\Request('Sign', 'GET', array('action' => 'in'));

$response = $presener->run($request);


Assert::type('Nette\Application\Responses\TextResponse', $response);
	}

A test mi vraci:
`Exited with error code 255 (expected 0) Nette\InvalidStateException: Ambiguous class App\IntraModule\Forms\CustomerFormFactory resolution; defined in D:\www\projekt\intra.dtest.cz\tests/../app\IntraModule\forms\CustomerFormFactory.php and in D:\www\projekt\intra.dtest.cz\tests/../app/IntraModule\forms\CustomerFormFactory.php.
`

Nechapu kde se bere /app\IntraModule a \app\IntraModule, tedy odkaz na stejny skript, ale s obracenym lomitkem. Neni to nejaka Windows feature? Vyvijim na WampServeru.

hitzoR
Člen | 51
+
0
-

Předpokládám, že problém bude v tomhle:

$configurator->createRobotLoader()
    ->addDirectory(__DIR__ . '/../app')
        ->addDirectory(__DIR__ . '/../app/IntraModule')
    ->register();

Smaž ten řádek s /app/IntraModule, je tam zbytečně, protože RobotLoader prochází i podsložky, tzn. tuhle složku už si načte z definice /app.

Editoval hitzoR (5. 11. 2016 23:54)

libik
Člen | 96
+
0
-

Pak ale nevim jak si poradit s timto:

Exited with error code 255 (expected 0) Nette\Application\InvalidPresenterException: Cannot load presenter 'Sign', class 'App\Presenters\SignPresenter' was not found.

Ktery je ale v App\IntraModule\Presenters

hitzoR
Člen | 51
+
0
-

libik napsal(a):

class ‚App\Presenters\SignPresenter‘ was not found.`

Ktery je ale v App\IntraModule\Presenters

Nebude náhodou problém s namespacem?

Editoval hitzoR (6. 11. 2016 13:05)

libik
Člen | 96
+
0
-

SignPresenter ma namespace App\IntraModule\Presenters; takze opravdu nevim, co mam kde spatne nastaveneho, ze ho tester hleda v App\Presenters

Aplikace jako takova mi funguje.

Editoval libik (6. 11. 2016 14:23)

hitzoR
Člen | 51
+
+2
-

Zkus v testovací metodě vyměnit

$presenter = $presenterFactory->createPresenter('Sign');

za

$presenter = $presenterFactory->createPresenter('Intra:Sign');

Editoval hitzoR (6. 11. 2016 14:36)

libik
Člen | 96
+
0
-

Jo to bylo ono, diky. Ja tam – kdyz uz – zkousel dat namespace. Diky moc! Posunu se dal :)