Správný zápis deprected addStyle

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

Router::addStyle a Router::addStyleProperty jsou deprecated. Mám to chápat tak, že jedinou správnou a podporovanou možností je Route::$styles[]?

Editoval Keeehi (30. 9. 2015 14:33)

David Matějka
Moderator | 6445
+
+1
-

ne, spravnou moznosti je nepouzivat staticke filtry, ale filtry u konkretnich rout: https://doc.nette.org/…tion/routing#…

Keeehi
Člen | 36
+
0
-

Ale to jde přeci proti DRY. Když potřebuji stejný filtr použít u více rout. Teda řešení mě napadlo, ale je to stejně příšerně ukecané.

Nyní mám

Route::$styles['#filter'] = [
	Route::FILTER_OUT => null,
	Route::PATTERN => ".*"
];

$router[] = new Route('xyz/<action>/<parameter #filter>', 'Abc:default');
$router[] = new Route('<presenter>/<action>/<parameter #filter>', 'Homepage:default');

A správně by tedy mělo být?

$filter = [
	Route::FILTER_OUT => null,
	Route::PATTERN => ".*"
]

$router[] = new Route('xyz/<action>/<parameter>', [
	'presenter' => 'Abc',
    'action' => 'default',
    'parameter' => $filter]
);
$router[] = new Route('<presenter>/<action>/<parameter>', [
	'presenter' => 'Homepage',
    'action' => 'default',
    'parameter' => $filter]
);
David Matějka
Moderator | 6445
+
0
-

ano, treba takhle to muzes zapsat, nebo si treba muzes napsat factory na ty routy

greeny
Člen | 405
+
0
-

Vždycky můžeš použít přístup jako tenhle:

class RouterFactory
{
	public function createRouter()
	{
		$myFilter = new MyFilter; // (or use DI)

		$router = new RouteList;
		$router[] = new Route('<presenter>/<action>[/<id>]', [
			'module' => 'Public',
			'presenter' => 'Dashboard',
			'action' => 'default',
			NULL => [
				Route::FILTER_IN => [$myFilter, 'in'],
				Route::FILTER_OUT => [$myFilter, 'out'],
			],
		]);
		$router[] = new Route('admin/<presenter>/<action>[/<id>]', [
			'module' => 'Admin',
			'presenter' => 'Dashboard',
			'action' => 'default',
			NULL => [
				Route::FILTER_IN => [$myFilter, 'in'],
				Route::FILTER_OUT => [$myFilter, 'out'],
			],
		]);
	}
}

Custom logiku filtrů máš tak krásně oddělenou v třídě bokem a nezaneřádí ti RouterFactory.

David Grudl
Nette Core | 8218
+
0
-

Nestačí tohle?

$router[] = new Route('xyz/<action>/<parameter .*>', 'Abc:default');