getUserState()
for 1.5.x
先日、$mainframe が持つ getUserStateFromRequest() の問題点について挙げた。
フォームの入力をセッションに保持しつつ、リクエストから取得したい要望を満たすため、問題点を踏まえた上で Model に搭載すると便利かもしれないメソッドを作った。
- セッションキーは option/view でスコープをローカライズ
class MyModel extends JModel { /** * get user state key * * @param string base name * @return string key */ function getUserStateKey($name) { $key = ''; $option = JRequest::getVar('option'); $option and $key = $option . '.'; $view = JRequest::getVar('view'); $view and $key .= $view . '.'; return $key.$name; } /** * alias $mainframe->getUserStateFromRequest() * * @param string $name Variable name * @param string $default Default value if the variable does not exist * @param string $hash Where the var should come from (POST, GET, FILES, COOKIE, METHOD) * @param string $type Return type for the variable, for valid values see {@link JFilterInput::clean()} * @param int $mask Filter mask for the variable * @return mixed Requested variable * @since 1.5 */ function getUserState($name, $default = null, $hash = 'default', $type = 'none', $mask = 0) { $key = $this->getUserStateKey($name); global $mainframe; $value = $mainframe->getUserState($key); $value = JRequest::getVar($name, $value, $hash, $type, $mask); if ($type === 'int' && isset($value)) { $value = (int) $value; } $mainframe->setUserState($key, $value); return $value; } /** * alias $mainframe->setUserState() * * @param string name * @param mixed value */ function setUserState($name, $value) { $key = $this->getUserStateKey($name); global $mainframe; $mainframe->setUserState($key, $value); } /** * alias $mainframe->setUserState($name, null) * * @param string name * @param mixed value */ function delUserState($name) { $this->setUserState($name, null); } }