Jednodušší Nette\Application\Route

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8218
+
0
-

Novinky jsou tři:

  1. zjednodušení, kdy pole s dvojicí presenter a action můžete nahradit za řetězec Presenter:action
  2. možnost uvádět výchozí hodnoty přímo v masce pomocí <param=value>
  3. v konstruktoru MultiRouteru lze specifikovat omezení pro konkrétní modul (experimentální)

A příklady použití:

// dříve ee
$router[] = new Route('index.php', array(
	'presenter' => 'Homepage',
	'action' => 'default',
), Route::ONE_WAY);

// nyní jééé
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
// dříve eee
$router[] = new Route('<presenter>/<action>/<id>', array(
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));

// nyní jééé!
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:');
// dříve
$router[] = new Route('edit/<name>', array(
	'presenter' => 'Admin:Page',
	'action' => 'edit',
	'name' => 'homepage',
));

// nyní
$router[] = new Route('edit/<name=homepage>', 'Admin:Page:edit');

S pevným modulem

Dříve eee:

$router[] = new Route('index.php', array(
	'presenter' => 'Front:Default',
), Route::ONE_WAY);

$router[] = new Route('admin/<presenter>/<action>', array(
	'module' => 'Admin',
	'presenter' => 'Dashboard',
	'action' => 'default',
));

$router[] = new Route('<presenter>/<action>', array(
	'module' => 'Front',
	'presenter' => 'Homepage',
	'action' => 'default',
));

nyní jéééé:

$admin = $router[] = new MultiRouter('Admin');
$admin[] = new Route('admin/<presenter>/<action>', 'Dashboard:default');

$front = $router[] = new MultiRouter('Front');
$front[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$front[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
loov
Člen | 49
+
0
-

těm „nette slabším jedincům“ (jako jsem já), bych ještě rád doplnil, že pokud budete tuto novinku zkoušet, nezapomeňte jako já :) na

<?php
	$router = $application->getRouter();
?>

stále je to potřebný kus kódu :)

Vyki
Člen | 388
+
0
-

To už nebude fungovat pro moduly?

<?php
$router[] = new Route('<presenter>/<action>','Front:Homepage:default');
//myšleno Front jako module, Homepage jako presenter, default action
?>

nebo je to zpětně kompatibilní?

Editoval Vyki (24. 11. 2010 9:46)

David Grudl
Nette Core | 8218
+
0
-

To fungovat bude.