Struktura dokumentu s backendem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mardon
Člen | 59
+
0
-

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

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

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.

Aurielle
Člen | 1281
+
+2
-

Pročti si základy práce s namespaces. Třída Model má FQN App\Model\Model, nikoliv jen App\Model.

mardon
Člen | 59
+
0
-

Děkuji za upozornění, to jsem si v zápalu boje neuvědomila.

Aurielle napsal(a):

Pročti si základy práce s namespaces. Třída Model má FQN App\Model\Model, nikoliv jen App\Model.

CZechBoY
Člen | 3608
+
0
-

Navic App\Model\Model bych tipoval spis na abstraktni BaseModel, ktery bude predkem vsech databazovych modelu a sam nebude nikde pouzit.

mardon
Člen | 59
+
0
-

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.