kam umístit konstanty / aktuální datum
- Ascaria
- Člen | 187
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)
- 22
- Člen | 1478
@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
- petr.pavel
- Člen | 535
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.
- Ascaria
- Člen | 187
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.
- Ascaria
- Člen | 187
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)