Struktura dokumentu s backendem
- mardon
- Člen | 59
Ahoj,
upsala jsem se udržovat aplikaci, která je psaná v Nette a zřejmě se přecházelo i mezi různými verzemi Nette. Co mě ovšem hodně vadí je, že frontend a admin té aplikace jsou v podstatě separátní aplikace tj momentálně má každá z nich vlastní instalaci Nette se vším všudy, tedy app vendor config apod. Chtěla bych to asi nějak sjednotit pod jednu instalaci Nette. Jaká je doporučená struktura webu kde je forntend a admin sekce? Další co tam je trochu jinak je index.php je že v podstatě obsah www jako ho dává sandbox je přesuntu do kořene webu. I s tímto bych potřebovala torchu poradit.
Ještě to upřesním pod app bych chtěla mít admin a pod ním vlastní presenter a templates pro adminsitrační část a pod samotným app by byli models společné pro obě části, config společný pro obě a dále pak vlastní presenter a templates pro frontend.
Díky všem předem za ochotu poradit
Editoval mardon (10. 4. 2016 12:46)
- Myiyk
- Člen | 321
Můžeš použít dělení aplikace na moduly.
https://doc.nette.org/…n/presenters#…
app
- FrontModule
- presenters
- templates
- model
- AdminModule
- presenters
- templates
- model
- config
- model
- ...
- mardon
- Člen | 59
Tak s tim nejak bojuji ale nedari se mi. Mám problém s DI
app
- FrontModule
- presenters
- BasePresenter.php
- HomepagePresenter.php
- templates
- AdminModule
- presenters
- BasePresenter.php
- HomepagePresenter.php
- templates
- config
- model
- ...
config.neon
parameters:
php:
date.timezone: Europe/Prague
application:
errorPresenter: Error
session:
expiration: 14 days
services:
- App\Model\UserManager
- App\Model\Model
- App\Forms\FormFactory
- App\Forms\SignFormFactory
router: App\RouterFactory::createRouter
RouterFactory
<?php
namespace App;
use Nette;
use Nette\Application\Routers\RouteList;
use Nette\Application\Routers\Route;
class RouterFactory
{
/**
* @return Nette\Application\IRouter
*/
public static function createRouter()
{
$router = new RouteList();
// Admin
$router[] = new Route('admin/<presenter>/<action>/<id>', array(
'module' => 'Admin',
'presenter' => 'Home',
'action' => 'default',
'id' => NULL,
));
// Front
$router[] = new Route('<presenter>/<action>/<id>', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
return $router;
}
}
model\Model.php
<?php
namespace App\Model;
use Nette;
use Nette\Utils\Strings;
class Model extends Nette\Object
{
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
FrontModule BasePresenter.php
<?php
namespace FrontModule;
/**
* Base presenter for all application presenters.
*/
abstract class BasePresenter extends \Nette\Application\UI\Presenter
{
/** @var \App\Model */
protected $model;
public function injectModel(\App\Model $model)
{
$this->model = $model;
}
}
dostanu chybu: Service ‚application.2‘: Class App\Model needed by FrontModule\BasePresenter::injectModel() not found.
- mardon
- Člen | 59
Ano taky bych to tak tipovala, jak píšu výše je to aplikace zděděná po předchůdci, kde bych měla opravovat jen chyby, ale přesto že v Nette jsem začátečník vidím tam věci i v návrhu, které bych já řešila jinak. Na ty dojde možná postupně, pokud to vydržím.
CZechBoY napsal(a):
Navic App\Model\Model bych tipoval spis na abstraktni BaseModel, ktery bude predkem vsech databazovych modelu a sam nebude nikde pouzit.