Pomoc s routerem – převod webu na nette

Rossignolek
Člen | 2
+
0
-

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
+
+2
-

@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)

Rossignolek
Člen | 2
+
0
-

Moc děkuji za komplexní odpověď.