Pomoc s routerem – převod webu na nette
- Rossignolek
- Člen | 2
Ahoj, mám takový projekt na
cavybook.com
kde jde o to, že se kdokoliv může zaregistrovat a vytvořit si vlastní stránky na webu a poté odkaz na jeho stránky je cavybook.com/jmenoChovatelskeStanice/controler(presenter)/funkce.
A já bych tyto stránky rád převedl na Nette, ale dost tápu v routování a vytváření odkazů, když se jménoChovatelskeStanice bere z databáze. Strukturu souborů bych volil určitě pomocí modulů.
Děkuji za nasměrování a nějaký ten příklad pro lepší pochopení. Počítám s kompletním přepsáním webu.
Děkuji
Rossignolek
- m.brecher
- Generous Backer | 814
@Rossignolek
A já bych tyto stránky rád převedl na Nette
cavybook.com/jmenoChovatelskeStanice/controler(presenter)/funkce
doménu v routě pro začátek řešit nemusíš, začneš od lomítka, jmenoChovatelskeStanice jde z databáze, takže to není presenter, ale parametr, třeba station, za tím by následovala dvojice presenter/action.
Do stanic se poleze z nějaké společné homepage, kterou by řídil třeba EntryPresenter a každá stanice by mohla mít svoji homepage řízenou HomePresenterem. Tyto vstupní stránky by byly řízeny z akcí default a v url by pro jednoduchost akce nebyla.
Budeš potřebovat minimálně dva moduly – jeden jako veřejný web, druhý jako administraci. Takže zkus třeba začít s takovouto sadou rout:
use Nette;
use Nette\Routing\Route;
use Nette\Application\Routers\RouteList;
final class RouterFactory
{
use Nette\StaticClass;
public static function createRouter(): RouteList
{
$router = new RouteList;
$router->withModule('Front')
->addRoute('', 'Entry:default')
->addRoute('<station>/<presenter>[/<action>[/<id>]]', 'Home:default');
$router->addRoute('<module>', 'Home:default');
$router->addRoute('<module>/<presenter>[/<action>[/<id>]]',['action' => [Route::Value => 'default']]);
return $router;
}
}
nastavení mapování presenterů do modulů v common.neon souboru
application:
mapping: 'App\Modules\*\**Presenter'
Adresářová struktura:
/app
/Model
....
/Modules
/Front
/Entry
EntryPresenter.php
default.latte
/Home
HomePresenter.php
default.latte
.....
FrontPresenter.php
/Admin
/Home
HomePresenter.php
default.latte
.....
AdminPresenter.php
Do rootu složek modulů si dej abstraktní presentery, ze kterých budou dědit všechny presentery v modulu:
namespace App\Modules\Admin;
.....
abstract class AdminPresenter extends UI\Presenter
{
protected function startup(): void
{
parent::startup();
// ..... autorizace uživatele, řízení vstupu
}
}
Příklad finálního presenteru:
namespace App\Modules\Front\Home;
final class HomePresenter extends FrontPresenter
{
public function renderDefault(string $station): void
{
// .....
}
}
Dál budeš potřebovat layout pro veřejný web, layout pro administraci, nějaké navigační komponenty, modelové třídy pro práci s databází, atd…
Editoval m.brecher (25. 6. 14:51)