Předávání stringu v parametru
- Vojtha
- Člen | 37
Ahoj,
potřeboval bych předávat id v odkazu, problém je, že id je ve tvaru
např. „5b381571–6aba-4ea4–96bf-fddeee927ce5“, a to mi vyhazuje
error:
Invalid link: Argument $id passed to App\Presenters\TripPresenter::renderDetail() must be int, string given.
Zkoušel jsem ladit nastavení routeru, ale marně, hází to pořád
to samé.
Poradíte? Díky.
- Vojtha
- Člen | 37
Toto je definice routeru:
<?php
declare(strict_types=1);
namespace App\Router;
use Nette;
use Nette\Application\Routers\RouteList;
final class RouterFactory
{
use Nette\StaticClass;
public static function createRouter(): RouteList
{
$router = new RouteList;
$router->addRoute('[<locale=en cs|en>/]<presenter>/<action>[/<id>]', [
'presenter' => 'Homepage',
'action' => 'default',
'id' => [
Nette\Routing\Route::PATTERN => '[\s\S]*',
],
]);
return $router;
}
}
A v renderDefault() je jen čtení z DB:
public function renderDefault(): void
{
$this->template->tours = $this->databaseManager->getTours($this->locale);
}
- Michal Hlávka
- Člen | 190
Vsak ta chybova hlaska to jasne pise, vim ze uz diskuzi moc nepomuzu, ale je to tak do oci bijici, ze mi to neda si odpustit komentar. :D
- MajklNajt
- Člen | 494
@Vojtha iba taký tip: ak začínaš implementovať UUID, možno by bolo lepšie si to konvertovať už v routeri na objekt a v renderDetail vyžadovať miesto stringu tento objekt, ja mám na jednom projekte UUID od Ramsey a router vyzerá nejak takto:
public static function createRouter(\Ramsey\Uuid\UuidFactoryInterface $uuidFactory): RouteList
$router = new RouteList();
$router->addRoute(
"<presenter>[/<action>[/<id>]]",
[
"presenter" => "Homepage",
"action" => "default",
"id" => [
Route::FILTER_OUT => fn(\Ramsey\Uuid\UuidInterface $id) => $id->toString(),
Route::FILTER_IN => fn(string $id) => $uuidFactory->fromString($id)
]
]
);
return $router;
}
a potom presenter:
public function renderDetail(\Ramsey\Uuid\UuidInterface $id): void
{
...
}
Editoval MajklNajt (28. 1. 2020 19:15)
- Vojtha
- Člen | 37
Michal Hlávka napsal(a):
Vsak ta chybova hlaska to jasne pise, vim ze uz diskuzi moc nepomuzu, ale je to tak do oci bijici, ze mi to neda si odpustit komentar. :D
To samozřejmě ano, ale nejsem zvyklý na to, co všechno nette validuje při vytváření linku. Pokud by mi to spadlo až po kliknutí na odkaz, bylo by to jasné. Takhle jsem hledal chybu jinde.