Přechod na Nette 2.1: No route for HTTP request

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

Zdravím,
vzhledem k narůstajícím potížím s PostgreSQL a informaci, že verze 2.1 hodně opravuje, rozhodl jsem se přejít na novou verzi. Vzal jsem jednoduše aplikaci a nasadil na nový sandbox. Zatím končím na zprávě

No route for HTTP request.

Zatím jsem nic s routováním nedělal a nevšiml jsem si ničeho takového v popisu nekompatibilit.

Pavel Macháň
Člen | 282
+
0
-

jik napsal(a):

Zdravím,
vzhledem k narůstajícím potížím s PostgreSQL a informaci, že verze 2.1 hodně opravuje, rozhodl jsem se přejít na novou verzi. Vzal jsem jednoduše aplikaci a nasadil na nový sandbox. Zatím končím na zprávě

No route for HTTP request.

Zatím jsem nic s routováním nedělal a nevšiml jsem si ničeho takového v popisu nekompatibilit.

Ukaž jak a kde nastavuješ routy

jik
Člen | 149
+
0
-

Až dosud jsem se tím nezabýval a používal jsem sandbox z quickstartu z verze 2.0. Takže asi jenom bootstrap.php:

use Nette\Application\Routers\Route;

// Load Nette Framework
require LIBS_DIR . '/Nette/loader.php';

// Configure application
$configurator = new Nette\Config\Configurator;

// Enable Nette Debugger for error visualisation & logging
//$configurator->setDebugMode($configurator::AUTO);
$configurator->enableDebugger(__DIR__ . '/../log');

// Enable RobotLoader - this will load all classes automatically
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
        ->addDirectory(APP_DIR)
        ->addDirectory(LIBS_DIR)
        ->register();

// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . '/config/config.neon');
$configurator->addConfig(__DIR__ . '/config/config.local.neon');
$container = $configurator->createContainer();

// Setup router
$container->router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$container->router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

// Configure and run the application!
$container->application->run();
Patrik Votoček
Člen | 2221
+
0
-

Pokud jsi nasadil Sandbox 2.1 tak routy už se nenastavují v bootstrapu ale v RouterFactory

jik
Člen | 149
+
0
-

Aha, takže tam chybí routa pro index.php – ale tak jednoduché to asi není.

$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
vvoody
Člen | 910
+
0
-

Určite nemáš zaregistrovanú router factory v configu. Pravdepodobne si len nahradil config v sandboxe tým starým.

jik
Člen | 149
+
0
-

Aha, tak jsem nakopíroval do config.neon:

common:
        services:
                routerFactory: RouterFactory
                router: @routerFactory::createRouter

a výsledek:

Class RouterFactory used in service 'routerFactory' has not been found or is not instantiable.
vvoody
Člen | 910
+
0
-

No tak zrozumiteľnejšia chybová hláška už existovať nemôže. Máš tu triedu v projekte?

Paradiso
Člen | 101
+
0
-

Nemáš tam špatně namespace?

jik
Člen | 149
+
0
-

Ta třída je definována v router/RouterFactory.php – ale nevím, proč ji nevidím.

jik
Člen | 149
+
0
-

Jsem z toho pořád jelen. Hledám i nějakou jednoduchou aplikaci, která by byla postavena na takovéto kostře, ale nevidím. Namespace … pokud upravím config.neon

common
	services:
		routerFactory: Kada\RouterFactory

pak končím na

Class 'Kada\RouteList' not found

Editoval jik (31. 1. 2014 7:53)

jiri.pudil
Nette Blogger | 1032
+
0
-

Asi bys měl věnovat čas pročtení dokumentace.

tl;dr: Pokud ve jmenném prostoru Kada napíšeš RouteList a tu třídu nenaimportuješ:

use Nette\Application\Routers\RouteList;

ani nepoužiješ její FQCN, pak PHP jako poslední pokus před její název přilepí aktuální namespace.

jik
Člen | 149
+
0
-

Děkuji všem za pomoc a trpělivost.