Revize kódu (SessionManager)
- Ripper
- Člen | 56
Zdravím všechny, v Nette a celkově s PHP nedělám zas tak dlouho a dělám takový „hokusy pokusy“. Napsal jsem si SessionManager, který mi ještě více zjednodušuje práci se Session a chtěl bych vás poprosit zda je to takhle ve spolupráci s Nette správně. Jde mi hlavně o to, zda nemám někde třeba zachytávat vyjímky přes try-catch? Děkuji kdo si najde čas se na to podívat.
namespace Manage;
use Nette;
/**
* Session Manager
*/
class SessionManager extends Nette\Object
{
private $session;
public function __construct(Nette\Http\Session $session)
{
$this->session = $session;
}
/**
* Save session to specific section
*
* @param $section
* @param $name
* @param $value
*
* @return mixed
*/
public function saveSession($section, $name, $value)
{
$session = $this->getSection($section);
$session->$name = $value;
return TRUE;
}
/**
* Get saved session
*
* @param $section
* @param $name
*
* @return bool|mixed
*/
public function getSession($section, $name)
{
$session = $this->getSection($section);
return $session->$name;
}
/**
* Get section
*
* @param $section
*
* @return bool|Nette\Http\SessionSection
*/
public function getSection($section)
{
$session = $this->session->getSection($section);
return $session;
}
/**
* Remove session
*
* @param $section
* @param null $name
*/
public function removeSession($section, $name = NULL)
{
if (is_null($name)) {
$this->getSection($section)->remove();
} else {
unset($this->getSection($section)->$name);
}
}
}
- enumag
- Člen | 2118
Mám z té třídy pocit že si to spíše zesložiťuješ než zjednodušuješ. Mám z toho pocit že používáš section se určitým názvem z různých míst v aplikaci, což ale není dobře. Lepší je napsat si nějakou službu, do té injectnout Session a v této službě používat konkrétní section. Všechna práce s tou section by měla být zapouzdřená v té službě, nikdo venku by neměl ani znát název té section.
SessionManager takovou službou není protože nepoužívá konkrétní section ale všechny metody chtějí název section jako parametr.
Jako příklad bych ti doporučil třídu Nette\Http\UserStorage. Ta implementuje rozhraní IUserStorage, ale nikdo venku ani netuší že vnitřně využívá session (natož jméno konkrétní sekce).