User přímo do šablony?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 7823
+
0
-

Nebylo by šikovné, aby jednou z automaticky předávaných proměnných do šablony byl Environment::getUser() příp. identita + flag authenticated?

Honza Marek
Člen | 1664
+
0
-

Já tam uživatele mám. Pokud se to udělá samo, nejsem proti.

srigi
Nette Blogger | 555
+
0
-

Tusim aj Symfony ma v sablonach automaticky dostupnu premennu $sf_user. Takze preco nie.

JakubJarabica
Gold Partner | 184
+
0
-

V projektoch v šablóne mám (naplnené v BasePresenteri) $loggedIn a $identity, zvyčajne to používam takto:

<?php
{if $loggedIn}
Vitaj, {$identity->name}!
{else}
Prihlás sa!
{/if}
?>

Keďže to je pár riadkov kódu, o zavadím sporadicky, tak neriešim či to vo FW je alebo nie, bolo by však vhodné dať tomu rozumné názvy premenných, ak hrozia teoretické kolízie s premennými programátora(i keď ak aj sa použije rovnaká premenná v template, prepíšem pôvodnú).

edit: Prefix „nf_“ by možno na škodu nebol :)

Editoval JAM3SoN (11. 2. 2010 19:00)

Patrik Votoček
Člen | 2221
+
0
-

+1 (chtělo by to tu nějáké anketovátko)

Ondřej Mirtes
Člen | 1536
+
0
-

Jsem pro $user (jako identitu) a pro $isAuthenticated.

Honza Marek
Člen | 1664
+
0
-

Já mám $user jako opravdickýho usera. Řešim tam i věci typu {if $user->isAllowed("page", "edit")}<a href="{link edit}">Upravit</a>{/if}. Takže Ondřejův návrh by mě omezil.

Editoval Honza Marek (11. 2. 2010 20:53)

Ondřej Mirtes
Člen | 1536
+
0
-

Nojono, ale jak to udělat? Budeme mít $user, $identity a $isAuthenticated? To by bylo asi nejlepší, protože já v 99% případech potřebuji sahat jen do identity, ale např. Honzovi by chyběl samotný user. A mít jen usera a v 99% případů psát $user->identity, to asi ne.

pekelnik
Člen | 462
+
0
-

Ja to pouzivam v soucasne dobe takto:

<?php

// BasePresenter
public function startup()
{
	// Don't start session for forwarded requests
	$session = Environment::getSession();
	if (! $session->isStarted()) {
		$session->setOptions(array(
			'cookie_path' => '/',
			'cookie_domain' => '.' . $config->domain)
		);
		$session->start();
	}
	// User
	$this->template->user = Environment::getUser();
}
?>

Jeste jednou bych chtel bez emoci nadhodit jednu myslenku.

Ve zkratce se jedna o to, ze uzivatel by prestal byt napul session, naopak by mohl nabyvat instance libovolne tridy (IUser)

Proc to rvu sem: protoze by to prave vyresilo tyhle veci:

Ondrej:
Nojono, ale jak to udělat? Budeme mít $user, $identity a $isAuthenticated?

Pro zajemce je zde cele vlakno.
https://forum.nette.org/…strikes-back

David nakonec navrhnul $guestIdentity. To zminene problemy resi, lec ne zcela dle meho gusta :)

Prave v tomto vlakne se objevuji aspekty, ktere se mi nejak nepodarilo v puvodni diskusi vyzdvihnout ;)

Honza:
Já mám $user jako opravdickýho usera.

Ja taky :)

v6ak
Člen | 206
+
0
-

V šablonách bych byl pro minimální zapatlávání prostoru proměnnými bez namespace (teda spíš prefixu).

Jinak by se možná hodilo třeba <a n:if-allowed="page, edit" href="{link edit}">Upravit</a>, ale to je možná trošku OT.

Honza Marek
Člen | 1664
+
0
-

v6ak napsal(a):

V šablonách bych byl pro minimální zapatlávání prostoru proměnnými bez namespace (teda spíš prefixu).

Já jsem zase proti tomu, aby v šabloně byla půlka proměnných s prefixem a půlka bez :)

v6ak
Člen | 206
+
0
-

Ano, když už se špatně začalo, pak je otázka jestli:

  • špatně pokračovat a zůstat konzistentní?
  • opravit to, ale být špatný kvůli nekonzistenci?
  • opravit to i v minulosti, ale být špatný kvůli zahozené zpětné kompatibilitě?
Honza Marek
Člen | 1664
+
0
-

Beru a nebo c :-D

v6ak
Člen | 206
+
0
-

Ona tu je ještě možnost v podobě @Deprecated, ale to tady moc v úvahu nepřipadá. A celkově v PHP to je poněkud problém.

sodae
Nette Evangelist | 250
+
0
-

Možna to tu zaznělo, ale shrnu co souhlasím a co by se mělo implementovat do 1.0, podle mého názoru, ohledně tohohle topicu:

do Nette\Security\(I)Identity:

  • isAllowed

do šablon:

  • $user jako Identity
  • makro: (is|if)Allowed

v případě že není přihlášen $user = NULL

Tohle normálně používám.

BTW: Již podobné jsem navrhoval ale nikdo se nevyjádřil :(

lactarius
Člen | 47
+
0
-

Já jsem tak nějak vypozoroval a používám:

BasePresenter

protected function startup()
{
...
	parent::startup();
	$this->template->user = $user = Environment::getUser();
	$this->template->logged = $user->isAuthenticated() ? $user->getIdentity()->username : NULL;
...
}

@layout.phtml

<div id="footer">
	{if $logged}
		<span>{$logged}&nbsp;<a href="{link :Main:Auth:logout}">(odhlásit)</a></span>
	{else}
		<a href="{link :Main:Auth:login}">přihlásit</a>
	{/if}
</div>

default.phtml (např.)

...
<div class="tabsmenu">
	<ul>
		<li{if $module === 'Main'} class="selected"{/if}><a href="{link 		:Main:Default:}">Informace</a></li>
		{if $user->isAllowed('Admin:Default', 'default')}
			<li{if $module === 'Admin'} class="selected"{/if}><a href="{link :Admin:Default:}">Admin</a></li>
		{/if}
	</ul>
</div>
...

určitě je to dobrá myšlenka.

Dost často se tady vyskytuje zmínka o FW Symfony – dostal jsem se do situace, že se ho možná budu muset dokonce i učit, určitě to sem nepatří, chci se jen zeptat někoho věci znalého:
Co je to za zrůdnost ?

David Grudl
Nette Core | 7823
+
0
-

Přidávat samotnou identitu je nedostatečné. Je potřeba předat celý User.

Zajímalo by mě, jak to myslíte (konkrétně) s tím prefixováním.

Ad pekelnik: session_path nemusís nastavovat, session_domain nastavuj v bootstrapu. Session::start() nemá v presenteru co dělat, taky patří do bootstrapu. V posledních revizích Application startuje session samo.

v6ak
Člen | 206
+
0
-

No že bez prefixu to může snadno kolidovat s názvy aplikace.

Jod
Člen | 701
+
0
-

Keby bola Environment singleton tak by šlo volať {$env->user} {$env->config[‚abc‘]} {$env->variable[‚xyz‘]}.

pekelnik
Člen | 462
+
0
-

Jod napsal(a):

Keby bola Environment singleton tak by šlo volať {$env->user} {$env->config[‚abc‘]} {$env->variable[‚xyz‘]}.

Hm… :)

Tak tomu řikam myšlenka dne :)

To by se mi moc líbilo

dokonce <?php Environment::getVariable(‚foo‘); ?> → <?php $env->foo; ?>

+1

Honza Kuchař
Člen | 1661
+
0
-

Ad Environment: dobrý nápad, ale ve špatném tématu! Založte prosím další téma.

David Grudl
Nette Core | 7823
+
0
-

Jod napsal(a):

Keby bola Environment singleton tak by šlo volať {$env->user} {$env->config[‚abc‘]} {$env->variable[‚xyz‘]}.

Teoreticky proč ne, ale skutečně se to v šablonách využije?