empty a Identity – na inicializované proměnné v $data vrací TRUE

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

Verze Nette: 0.9.3 (rev 2ce0ca6 released on 2010–02–02)
Verze PHP: 5.2.9

Volání empty(Environment::getUser()->identity->setVariable) vrací TRUE, i když je daná proměnná nastavená a inicializovaná. Vyřeší nejspíš doplnění funkce __isset() do Identity.

Reprodukce kódu:

$user = Environment::getUser();
$data = $user->identity->getData();

dump(Environment::getUser()->identity->srv_password);
dump(empty(Environment::getUser()->getIdentity()->srv_password));
dump(Environment::getUser()->identity->srv_password == FALSE);
dump(empty($user->identity->srv_password));
dump(empty($user));
dump(empty($user->identity));
dump(empty($user->identity->srv_password));
dump(empty($user->identity->data['srv_password']));
dump(empty($data));
dump(empty($data->srv_password));

dump($data);

Výstup:

string(4) "1234"

bool(TRUE)

bool(FALSE)

bool(TRUE)

bool(FALSE)

bool(FALSE)

bool(TRUE)

bool(TRUE)

bool(FALSE)

bool(FALSE)

array(15) {
   "aid" => string(1) "1"
   "user" => string(4) "Uzivatel"
   "authid" => string(18) "STEAM_0:0:000000"
   "password" => string(40) "hash hesla"
   "gid" => string(1) "1"
   "email" => string(15) "xxx@yyy.cz"
   "validate" => string(0) ""
   "extraflags" => int(-513)
   "srv_immunity" => int(100)
   "srv_password" => string(4) "1234"
   "srv_group" => string(10) "Root admin"
   "srv_flags" => string(20) "abcdefghijklmnopqrst"
   "group_name" => string(4) "Root"
   "lastvisit" => int(1270407463)
   "data" => NULL
}

Editoval gmvasek (4. 4. 2010 21:11)

Aurielle
Člen | 1281
+
0
-

Fix – podědit Identity a přepsat metodu __isset():

/**
 * Is given propery set?
 * @return bool
 */
public function __isset($key)
{
	$_data = $this->getData();
	return isset($_data[$key]);
}
Honza Marek
Člen | 1664
+
0
-

Identity by určitě metodu __isset zasloužila. Taky jsem na podobný problém narazil.

David Grudl
Nette Core | 8228
+
0
-

isset přidáno