Více frontendů jeden backend (GIT)

MiskynsCZ
Člen | 10
+
0
-

Zdravíčko vzhledem k tomu, že backend je napsaný v nette a teoreticky mi ani na stackoverflow nepomohli, tak jsem vám chtěl položit otázky.

Mám backend, který obsahuje kompletně celou aplikaci od Nette v sobě obsahuje AdminModule a FrontendModule, AdminModule je všude stejný, protože ho chceme mít sjednocený, ale FrontendModule je pro každého klienta jiný.
Chtěl jsem se právě zeptat, že když máme repozitář pro každého klienta zvlášť, tak jak máme vyřešit aktualizaci Backendu? Bez toho aniž by se FrontendModule přepsal? Protože nechceme to stylovat znovu?

Potýkali jste se s něčím takovým už někdy? Řešíme to už minimálně 4 dny a pořád nás nic nenapadá, byl bych rád za každou radu, předem děkuji ;)

Šaman
Člen | 2537
+
0
-

Jestli používáte GIT, nepomohl by patch? https://www.devroom.io/…ch-with-git/

Zkušenosti s ním nemám, ale myslím, že by to mohlo být ono.

MiskynsCZ
Člen | 10
+
0
-

Koukám na to, ale obávám se, že když budeme vydávat novou verzi s novými funkcemi, tak se to v tom patch neprojeví nebo jo? A je to možné aktualizovat všechny repozitáře klientů najednou nebo to musím dělat všechno zvlášť?

David Matějka
Moderator | 6378
+
+2
-

admin (a dalsi sdilene casti) jako composer balicek/balicky

MiskynsCZ
Člen | 10
+
0
-

David Matějka napsal(a):

admin (a dalsi sdilene casti) jako composer balicek/balicky

Takže mám tu nette strukturu jako je

  • app
  • log
  • temp
  • vendor
  • www

Rozdělit na samostatné balíčky? Které potom composerem budu stahovat? A jak se to řeší když to app/ přidám FrontendModul nepřepíše se?

galab
Backer | 62
+
0
-

My jsme to třeba vyřešili takto: Core modul, který poskytuje API, na které se připojuje Admin a Front. Takže můžeme nezávisle na sobě updatovat kteroukoliv část

David Matějka
Moderator | 6378
+
0
-

no ta struktura aplikace bude i poté takováhle. ale přesuneš moduly a další společný kód (z app) do vendoru

Kamil Valenta
Člen | 370
+
0
-

AdminModule můžeš udržovat jako samostatný repozitář a samostatný projekt v IDE. Když se pak bude dělat build pro zákazníka, spojíš mu Front a Admin.

galab
Backer | 62
+
0
-

@DavidMatějka nevím, zda to bylo na mne, ale tímto způsobem máme:
domena.com – Front
admin.domena.com – Admin
api.domena.com – API
tím máme 3 appky nezávislé – ano je nevýhoda mít 2× komponenty pro front a admin, ale zase nám to umožňuje psát specifické rozšíření pro jednotlivé klienty, ale zároveň udržovat to Core aktuální pro vše

A pro klienty, kteří si myslí, že PHP je mrtvé (viz vedlejší vlákno), nabídneme jim super hype JS frontend framework

Editoval galab (25. 4. 2019 21:21)

Václav Pávek
Backer | 84
+
0
-

galab napsal(a):

@DavidMatějka nevím, zda to bylo na mne, ale tímto způsobem máme:
domena.com – Front
admin.domena.com – Admin
api.domena.com – API
tím máme 3 appky nezávislé – ano je nevýhoda mít 2× komponenty pro front a admin, ale zase nám to umožňuje psát specifické rozšíření pro jednotlivé klienty, ale zároveň udržovat to Core aktuální pro vše

A pro klienty, kteří si myslí, že PHP je mrtvé (viz vedlejší vlákno), nabídneme jim super hype JS frontend framework

Ty domény mají společný document root (jedná se o alias) nebo každá doména má vlastní document root?
Jinak nejlepší řešení pro společný kód je opravdu použít composer balíčky + si případně pohrát s PresenterFactory.

MiskynsCZ
Člen | 10
+
0
-

Tak jak to tak vidím, tak je asi fakt nejlepší využít ten composer, akorát ještě otázečka jestli nemůžete náhodou sepsat jak to udělat jak dostat ten AdminModule do composeru, včetně modelů atd… A jak pak nastavit že budu moct měnit jenom Frontend bez zásahu do pozadí, jinak ve frontendu mám klasicky presentery a templaty.

Předem děkuji moc za odpověď.

Phalanx
Člen | 310
+
0
-

Mrkni sem:
https://forum.nette.org/…elnem-modulu#…

Bude ti nejspíš stačit jen první část odpovědi (bez nutnosti vytvářet vlastní extension).

Pro ukázku jak to funguje např. grid od Matouše:
https://github.com/mesour/DataGrid

složka src je nalinkovaná composerem z composer.json

MiskynsCZ
Člen | 10
+
0
-

Phalanx napsal(a):

Mrkni sem:
https://forum.nette.org/…elnem-modulu#…

Bude ti nejspíš stačit jen první část odpovědi (bez nutnosti vytvářet vlastní extension).

Pro ukázku jak to funguje např. grid od Matouše:
https://github.com/mesour/DataGrid

složka src je nalinkovaná composerem z composer.json

Super tak na to dneska doma kouknu a zkusím to tak udělat, jenom malá otázečka, když bude AdminModule presentery, templaty a potom models, jak z toho vendoru rozpozná že mimo vendor je složka Frontend (další modul) a má se načítat z toho? V router factory nebo v configu?

Phalanx
Člen | 310
+
0
-

Budeš například přidávat presenter
vendor/tvoje-knihovna/src/AdminModule/Presenters/AbcPresenter.php

To znamená, že musíš udělat:

  1. composer dump (aby se ti načetl automaticky)
  2. nastavit si, odkud načítat layout – například v beforeRender is nastavíš přes $this->setLayout('/app/FrontModule/...');
zachrdlapetr
Člen | 49
+
+1
-

Nevím jestli to pro vás nebude moc velká haluz, ale my jsme to řešívali pomocí htaccess, kde jsme vynutili společnou část pro backend. To znamená, že každý klient měl svoji /app/backend/ pokud se v backendu dělaly individuální změny, ale když jsme jim chtěli dát obecnou, tak se použil htaccess a nezáleželo na tom, kdy se přenese obecná změna k jednotlivým klientům, protože změnou společného backendu se to vyřešilo najednou pro všechny zákazníky používající společný backend. Frontend tím zůstal nedotknutý.

php_value include_path /spolecny/app/backend/:/app/backend/
David Matějka
Moderator | 6378
+
0
-

To, kde bude nette hledat presentery (v jakém namespace), tak to záleží na presenter factory, respektive mappingu, který můžeš nastavit v neonu: https://doc.nette.org/…/configuring#…

MiskynsCZ
Člen | 10
+
0
-

Ouki, díky moc všem za rady! Akorát jenom upřesnění, takže když budu mít celou část app ve vendoru a poté si nastavím mapping, tak AdminModule se mi vyhledá ve vendoru a Frontend třeba v té složce FrontendModule který bude mimo vendoru, takže struktura bude vypadat takto.

Struktura

  • FrontendModule
  • vendor
    • název balíčku
      • app…
  • www
  • config

Mám pravdu?

tomat
Člen | 16
+
0
-

Já bych to rozdělil tak, abych měl celý projekt jako jeden repozitář a pak frontModule a adminModule jako další samostatné repozitáře. V composeru pak přidat cesty k front/admin modulům. Každý klient bude mít nainstalovaný hlavní projekt a v composeru se mu upraví jen cesta k jeho konkrétnímu frontModule a cesta k adminModule bude vždy stejná.

Pokud nemáš vlastní packagist, lze načíst repozitář napřímo:

	"require": {
		"muj_projekt/frontModule": "dev-master",
	},
	"repositories": [
		{
			"type": "vcs",
			"url": "git@gitlab.com:muj_projekt.git"
		}
	],

Sice budeš mít ve výchozím chování moduly v /vendor/muj_projekt/frontModule, ale i toto lze upravit aby se ti načetli i přes composer do /app/frontModule