kam umístit konstanty / aktuální datum

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

Dobrý den,

chci se zeptat, kam bych měl dát konstanty, které budu používat napříč projektem. :-) Budou to různé blbosti, které nepředstavují bezpečnostní riziko!

A je nějaká funkce, kterou získám aktuální čas, který pak mohu uložit do databáze?

Děkuji Hošek Petr

Ascaria
Člen | 187
+
0
-

Pro aktuální čas ve tvaru pro databázi je možné zavolat: <?php strftime(‚%F %T‘); ?> Pokud už nějaký čas existuje a je potřeba ho „přetypovat“ pro databází, osvědčila se mi konstrukce <?php strftime(‚%F %F‘, strtotime($time)); ?>

Konstanty bych dal asi do neonu:

config.neon

common:
  php: # PHP configuration
    date.timezone: Europe/Prague
    # session.save_path: "%tempDir%/sessions"
    # zlib.output_compression: yes
    # default_charset: "UTF-8"

  services:
    authenticator:
      class: ...

    robotLoader:
      run: true
...
  myConstants:
    neco: hodnota
    blabla: bleble

Editoval Ascaria (21. 3. 2012 20:19)

HosekPetr
Člen | 31
+
0
-

@Ascaria Děkuji za odpověď a jak pak k nim budu přistupovat? :-)

HosekPetr
Člen | 31
+
0
-

Mě napadlo udělat nějaký soubor s konstantami někde v adresářové struktuře nette, tyto soubory se automaticky includují a tak bych k nim mohl přistupovat všude ne?

22
Člen | 1478
+
0
-

@Ascaria: to je prosím míněno jako rada, nebo to je nějaký pokus o vtip?

  • když už někdo nervomocí chce používat klasické PHP konstanty, tak je od toho např. sekce constants: v configu
  • v PHP existuje třída DateTime, pokud chceš využívat OOP, o což se tu snažíme, tak pro získání aktulaního času serveru ti stačí new DateTime(), viz. PHP dokumentace
Ascaria
Člen | 187
+
0
-

HosekPetr napsal(a):

@Ascaria Děkuji za odpověď a jak pak k nim budu přistupovat? :-)

V presenteru $this->context->params[‚myConstants‘][‚neco‘]; ale vzhledem k reakci 22 bych řekl že radím blbě.

HosekPetr
Člen | 31
+
0
-

@Ascaria Hlavní je snaha a tu je vždy potřeba ocenit! Děkuji!

22 Děkuji! Už si nějak poradím! :-)

petr.pavel
Člen | 535
+
0
-

Ještě podotýkám, že jestli to datum potřebuješ jen uložit do db, tak k tomu vůbec nepotřebuješ PHP.
Každá databáze má své klíčové slovo nebo funkci pro získání aktuálního času. Pro MySQL je to třeba CURRENT_DATE.

HosekPetr
Člen | 31
+
0
-

@petr.pavel Moc děkuji, nebude se jednat jen o aktuální datum! :-) Přemýšlel jsem, že si udělám třídu const, v ní nadefinuji konstanty a k těm pak budu přistupovat takto const::CONSTANTA.

Editoval HosekPetr (22. 3. 2012 10:58)

Ascaria
Člen | 187
+
0
-

HosekPetr napsal(a):

@petr.pavel Moc děkuji, nebude se jednat jen o aktuální datum! :-) Přemýšlel jsem, že si udělám třídu const, v ní nadefinuji konstanty a k těm pak budu přistupovat takto const::CONSTANTA.

Tímto ale budeš porušovat Dependency Injection a budeš mít v kódu zde hodně zmiňované magie. Pokud bude třída #2 vyžadovat nějakou konstantu, či proměnnou, tak pak rodičovská třída #1, kerá danou třídu #2 vytvořila, jí musí patřičné informace předat konstruktorem / metodami. Např takto předávám uživatele komponentě:

<?php
    /**
     * New Certification Requests Grid
     * @param String $name název komponenty
     */
    protected function createComponentNewCrg($name)
        {
        // Vytvoříme komponentu nových certifikovaných zařízení
        $grid = new Grids\NewCertificationRequestsGrid($this, $name);
        // Nastavíme gridu uživatele
        $grid->user = $this->user;
        }
?>

Komponenta si mi pro usera nesahá do $this->presenter->user i když může.

HosekPetr
Člen | 31
+
0
-

@Ascaria A jak prosím tě vypadá ta třída Grids\NewCertificationRequestsGrid pokud budeš ochoten se podělit. :-)

Ascaria
Člen | 187
+
0
-

No celou třídu sem asi dát nemůžu, ale klíčové věci vypadají asi takto:

<?php
final class NewCertificationRequestsGrid extends CertificationRequestsGrid
    {
    /**
     * Klasický konstruktor, může se vynechat
     */
    public function __construct($parent, $name)
        {
        parent::__construct($parent, $name);
        // Nastavíme hlavičku
        $this->header = '_nove_zadosti';
        }
    }
?>
<?php
abstract class CertificationRequestsGrid extends Control
    {
    /**
     * Text hlavičky bloku
     * @var String
     */
    protected $header;

    /**
     *
     * @var User
     */
    protected $user;

    /**
     *
     */
    public function __construct($parent, $name)
        {
        parent::__construct($parent, $name);

        // ...
        }

/*
    Getters & setters
*/

    /**
     * Nastaví komponentě uživatele.
     * @var User $user
     */
    public function setUser(User $user)
        {
        $this->user = $user;
        }

    /**
     * Vrátí uživatele komponenty.
     * @return User
     */
    public function getUser()
        {
        return $this->user;
        }
    }
?>

Díky Nette je možné v tomto případě (resp. ve všech případech, kdy prapředek třídy je Nette\Object) zápis $grid->setUser($user); zapsat jako $grid->user = $user; a $user = $grid->getUser(); jako $user = $grid->user;

Editoval Ascaria (22. 3. 2012 11:21)

HosekPetr
Člen | 31
+
0
-

@Ascaria Velice děkuji! :-) Už mám představu o tom jak to pořeším, až přijdu domů! :-)