Skip to content

Instantly share code, notes, and snippets.

@landsman
Created February 20, 2019 12:22
Show Gist options
  • Save landsman/3daafdd29d166ed78d585c513b7fcda0 to your computer and use it in GitHub Desktop.
Save landsman/3daafdd29d166ed78d585c513b7fcda0 to your computer and use it in GitHub Desktop.
<?php
namespace App;
use Nette;
use Nette\Application\Routers\RouteList;
use Nette\Application\Routers\Route;
use Kdyby\Doctrine\EntityManager;
use App\Model\CatalogModel;
use App\Model\PageModel;
class RouterFactory
{
/**
* @var EntityManager
*/
public $entityManager;
private $cmsRoutes = [];
public function __construct(CatalogModel $catalogModel, PageModel $pageModel)
{
//todo: temporary fix for creating DB schema (DB table doesn't exist at that moment)
try {
$this->cmsRoutes = $pageModel->FindCMSPageUrl();
} catch (\Exception $e) {
}
}
/**
* @return array|RouteList
*/
private function createCatalogRouter()
{
$router = new RouteList('Catalog');
/** Redirects */
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('index.html', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route("kategorie/<id>-<slug>", [
"presenter" => "Homepage",
"action" => "category",
"id" => null,
"slug" => null
]);
$router[] = new Route("produkt/<id>-<slug>", [
"presenter" => "Homepage",
"action" => "item",
"id" => null,
"slug" => null
]);
$router[] = new Route("priloha/<id>", [
"presenter" => "Homepage",
"action" => "attachment",
"id" => null
]);
$router[] = new Route("vyrobce/<id>-<slug>", [
"presenter" => "Homepage",
"action" => "producer",
"id" => null,
"slug" => null
]);
/**
* Search
*/
$router[] = new Route("hledat", [
"presenter" => "Homepage",
"action" => "search",
]);
/**
* Cart
*/
$router[] = new Route("kosik", [
"presenter" => "Cart",
"action" => "default",
]);
$router[] = new Route("kosik/objednat", [
"presenter" => "Cart",
"action" => "info",
]);
$router[] = new Route("kosik/objednat", [
"presenter" => "Cart",
"action" => "info",
]);
$router[] = new Route("kosik/doprava-a-platba", [
"presenter" => "Cart",
"action" => "paymentTransfer",
]);
$router[] = new Route("kosik/dokonceni-objednavky", [
"presenter" => "Cart",
"action" => "summary",
]);
$router[] = new Route("kosik/dekujeme-za-objednavku", [
"presenter" => "Cart",
"action" => "completed",
]);
$router[] = new Route("registrace", [
"presenter" => "User",
"action" => "registration",
]);
$router[] = new Route("registrace-uspesna", [
"presenter" => "User",
"action" => "registrationSuccessful",
]);
/**
* CMS pages
*/
foreach($this->cmsRoutes as $id => $url)
{
$router[] = new Route($url, [
"presenter" => "Page",
"action" => "default",
"id" => $id
]);
}
return $router;
}
/**
* @return Nette\Application\IRouter
*/
private function createApiRouter()
{
$router = new RouteList('API');
$router[] = new Route("sitemap.xml", "Homepage:sitemap");
$router[] = new Route("api/fman", "Fman:default");
$router[] = new Route("api/fman/connector", "Fman:connector");
$router[] = new Route('api/<presenter>/<action>[/<id>]', [
"presenter" => "Homepage",
"action" => "default",
"id" => null
]);
return $router;
}
/**
* @return Nette\Application\IRouter
*/
public function createRouter()
{
$router = new RouteList();
/** Admin */
$router[] = new Route("admin/<presenter>/<action>[/<id>]", [
"module" => "Admin",
"presenter" => "Homepage",
"action" => "default"
]);
$router[] = new Route("fman", [
"module" => "Admin",
"presenter" => "Fman",
"action" => "default",
]);
/** E-shop */
$router[] = $this->createCatalogRouter();
/** API */
$router[] = $this->createApiRouter();
/** Homepage */
$router[] = new Route('<presenter>/<action>[/<id>]', 'Catalog:Homepage:default');
return $router;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment