Poslání FileResponse z routeru

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

Ahoj, existuje možnost poslat FileResponse už přímo v Routeru? Pro download routu mi přijde zbytečné vyrábět presenter. Moje idea je kód podobný tomuhle:

$router[] = new Route('download/<id>', function ($id) use ($fileRepository) {
    if ($file = $fileRepository->getFile($id)) return new FileResponse($file);
    return NULL;
});

Je na to nějaký univerzální řešení, nebo mám zůstat u DownloadPresenter u?

looky
Člen | 99
+
0
-

Jedna z možností:

$router[] = new Route('download/<id>', [
	'presenter' => 'Nette:Micro',
	'callback' => function($id) {
		// ...
	},
]);
greeny
Člen | 405
+
0
-

Myslím že to jde i tím kratším způsobem jak jsem ukazoval. U tohohle řešení se ale dostávám do problému, jak generovat odkazy (n:href mi to nebere, musím přímo href="download/{$id}")

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Zkusil bych:

<a n:href=":Nette:Micro: id => $id">
greeny
Člen | 405
+
0
-

Jop, už to funguje (chyba byla v routeru :D)

looky
Člen | 99
+
0
-

@greeny Máš pravdu, callback jako metadata routy se přeloží na MicroPresenter. TIL.