Zvýrazňování syntaxe phpStorm

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

Ahoj,

snažím se přijít na způsob jak se zbavit zvýrazňování některých zápisů (nemyslím vypnutím upozorňování)

$user->identity->some_value; //Field some_value not found in class IIdentity..

$this->user->storage->setNamespace('...'); //To samé

A potom ještě když zjišťuji logoutReason tak User::INACTIVITY mi hlásí, že je deprecated, ale nenašel jsem žádnou obdobu, jak to tedy je ?

Blbý je, že všechny tyhle případy jsou v nette příručce. Díky za rady :)

Editoval kleinpetr (16. 11. 2015 23:28)

vitkutny
Člen | 73
+
0
-

v php snad jedině použít instanceof

$identity = $user->getIdentity();
if($identity instanceof IdentityWithSomeValue){
	$identity->some_value;
}
$storage = $this->getUser()->getStorage();
if($storage instanceof UserStorage){
	$storage->setNamespace('...');
}

ohledně User::INACTIVITY ⇒ IUserStorage::INACTIVITY https://api.nette.org/…ser.php.html#29

Editoval vitkutny (17. 11. 2015 0:19)

kleinpetr
Člen | 480
+
+1
-

setNamespace jsem vyřešil takto:

/** @var UserStorage $storage*/
$storage = $this->user->storage;
$storage->setNamespace('..');

ale stejně mi nějak nejde do hlavy proč ta metoda není i v tom interfacu.. a co se týče INACTIVITY tak v anotaci je @deprecated ale proč ?

Oli
Člen | 1215
+
0
-

Však to je v tom kodu. Je to deprecated, protože teď to máš volat na tý interface. https://api.nette.org/…age.php.html#…. V tom User to je jen kvůli zpětný kompatibilitě

kleinpetr
Člen | 480
+
0
-

ajo díky, jinak co se týče tahání dat z identity, tak jak by se to mělo správně řešit ?

Tohle mi přijde nějaký divný

$identity = $user->getIdentity();
if($identity instanceof IdentityWithSomeValue){
    $identity->some_value;
}
Martk
Člen | 661
+
0
-

Já jsem to udělal následovně.

Vytvořil jsem si třídu např. My\User, která dědí z Nette\Security\User.

Zaregistroval změnu v DI:

$builder->getDefinition('user')
		->setFactory('My\User');

Nová třída User:

namespace My;

/**
 * @property-read Entity\User $identity
 */
class User extends Nette\Security\User {

	/**
 	 * @return Entity\User
	 */
	public function getIdentity() {
		return parent::getIdentity();
	}

V presenteru:

namespace My;

/**
 * @property-read My\User $user
 */
class BasePresenter extends Nette\Application\UI\Presenter {

	public function method() {
		$this->user->getIdentity(); $this->user->identity; // Našeptáva Entity\User
	}
}

Snad jsem na nic nezapomněl.