$basePath v Presenteru – z Template nebo HttpRequest – pokaždé jiná hodnota?

m.brecher
Generous Backer | 871
+
0
-

Vyvíjím více projektů Nette na lokálním serveru současně a mám projekty ve složkách docRoot serveru Apache takto:

- /www/projek1/www/
    - /projekt2/www/

kde první /www/ je namapováno na doménu localhost, vnořené /www/ je wwwDir nette projektu.

Zjistil jsem, že cookie session se nastavují s platností pro celou doménu localhost, tj. pro celý top adresář /www/. To má za následek, že se mezi všemi projekty sdílí PHPSESSID a User v jednom projektu je v tracy-bar vidět v ostatních projektech.

Vše by vyřešila konfigurace php.ini session.cookie_path = $basePath.‚/‘.

Zkoušel jsem dvě varianty v $presenter->startup():

$basePath = $presenter->getHttpRequest()->getUrl()->getBasePath();	  // vypíše /projekt1/www/
$basePath = $presenter->getHttpRequest()->getUrl()->basePath;	      // vypíše /projekt1/www/

$basePath = $presenter->template->basePath;	                          // vypíše /projekt1/www

První otázka – dělám něco špatně, že různé metody vracejí různé hodnoty $basePath, nebo je to vlastnost frameworku ?

O to ale zase tolik nejde – správnou hodnotu $basePath přes template v presenteru už mám, jenom potřebuji šikovně nakonfigurovat session.

local.neon jsem zkoušel tento kód který bezpečně funguje:

session:
    cookiePath: '/projekt1/www/'

Úplně spokojen ale nejsem, protože při změně adresářové struktury, nebo přejmenování kořenové složky projektu toto řešení nebude fungovat a nemusí se na to vůbec přijít.

Druhá otázka – potřebuji poradit :

  1. buďto jak provést identickou konfiguraci v local.neon metodami v presenteru – tam už mám $basePath k dispozici
  2. nebo jak dostat parametr $basePath z Presenteru do local.neon třeba jako %basePath%

Pátral jsem hodiny v dokumentaci Nette bez výsledku. Díky za jakékoliv info.

Editoval m.brecher (28. 9. 2021 18:51)

Marek Bartoš
Nette Blogger | 1274
+
+1
-

Proč je to tak jak je nevím, ale řešení bych měl :)

session:
	cookiePath: @Nette\Http\IRequest::getUrl()::getBasePath()

Vygenerovaný kód v DIC by měl vypadat takto 'cookiePath' => $this->getService('http.request')->getUrl()->getBasePath(),

Editoval Marek Bartoš (23. 9. 2021 22:25)

Kamil Valenta
Člen | 820
+
0
-

Není lepší si v hosts definovat „lokální domény“ a simulovat provoz projektů na reálných doménách?
Tedy example.cz vs. example.loc, example2.cz vs. example2.loc etc.

Když se válí vše pod localhost/<path>, člověk nenasimuluje vše.

m.brecher
Generous Backer | 871
+
0
-

Marek Bartoš napsal(a):

Proč je to tak jak je nevím, ale řešení bych měl :)

session:
	cookiePath: @Nette\Http\IRequest::getUrl()::getBasePath()

Vygenerovaný kód v DIC by měl vypadat takto 'cookiePath' => $this->getService('http.request')->getUrl()->getBasePath(),

@MarekBartoš funguje to SUPR, zase jsem o něco více nette-chytřejší, dík :)

m.brecher
Generous Backer | 871
+
0
-

Kamil Valenta napsal(a):

Není lepší si v hosts definovat „lokální domény“ a simulovat provoz projektů na reálných doménách?
Tedy example.cz vs. example.loc, example2.cz vs. example2.loc etc.

Když se válí vše pod localhost/<path>, člověk nenasimuluje vše.

@KamilValenta zajímavá myšlenka simulovat domény v souboru localhost, myslel jsem, že bych si musel doma nainstalovat celý dns server :)

Michal Kumžák
Člen | 106
+
0
-

Nebo jak už tu někdo nabízel, můžeš to pustit v dockeru.

David Grudl
Nette Core | 8227
+
+2
-

Stačí do souboru hosts přidat

nette.l   127.0.0.1
www.nette.l   127.0.0.1
forum.nette.l   127.0.0.1

Povolit v Apache:

<VirtualHost *>
    DocumentRoot "W:/.../www"
    ServerName nette.l
    ServerAlias *.nette.l
</VirtualHost>

A ještě je fajn rozjet na lokále https pomocí https://github.com/…ttile/mkcert, ale není to samozřejmě nutné. Pak se to opět zapne na Apache nastavením SSLCertificateFile, SSLCertificateKeyFile a:

<VirtualHost *:443>
    DocumentRoot "W:/.../www"
    ServerName nette.l
    ServerAlias *.nette.l
    SSLEngine on
</VirtualHost>
David Grudl
Nette Core | 8227
+
+5
-

Ad getHttpRequest()->getUrl()->getBasePath() vs $basePath – liší se v tom lomítku na konci, asi z nějakých historických důvodů. Zjistím, jestli by to šlo v další verzi sjednotit, nebo by to byl příliš velký BC break.