Nette cache wrapper a IDE

Taufic
Člen | 31
+
0
-

Čauvec,
jak využíváte nejčastěji wrapper v Nette cache? Trochu mě rozčiluje, že při klasickém použití fallbacku $wrapper = $this->cache->wrap([class, ‚function‘]); se ide tváří, že funkce není nikde využitá.

Dík moc :)

CZechBoY
Člen | 3608
+
+1
-

Co používáš za IDE? PhpStorm to zvládá :-)

Taufic
Člen | 31
+
0
-

CZechBoY napsal(a):

Co používáš za IDE? PhpStorm to zvládá :-)

PhpStorm, ale možná to používám blbě :D

<?php
$wrapper = $this->cache->wrap([$dbManager, 'getUserName'], $this->defaultDependencies);
$userName = $wrapper($userId);
?>
<?php
class DbManager
{
    public function getUserName($userId){
        return something_awasome;
    }
}
?>

a tahle funkce se tváří že není nikde použitá. Což je logický, protože to zadávám do wrapu jen jako string.

Editoval Taufic (4. 2. 2018 11:03)

CZechBoY
Člen | 3608
+
0
-

A ví PhpStorm o typu $dbManager? Ctrl + najetí myší nad proměnnou ti ukáže v tooltipu její typ.

Taufic
Člen | 31
+
0
-

CZechBoY napsal(a):

A ví PhpStorm o typu $dbManager? Ctrl + najetí myší nad proměnnou ti ukáže v tooltipu její typ.

jj, o DbManageru ví. Možná je to nějakým nastavením, ale nenapadá mě pod čím bych to mohl hledat.

Plus je ještě zajímavé, že když nad tím použiju stejným způsobem call_user_func tak to phpstorm rozezná.

Editoval Taufic (4. 2. 2018 12:01)

nightfish
Člen | 472
+
0
-

Co se stane, když to přepíšeš na anonymní funkci?

$wrapper = $this->cache->wrap(function($userId) use ($dbManager) {
  return $dbManager->getUserName($userId);
}, $this->defaultDependencies);
CZechBoY
Člen | 3608
+
0
-

Tak jsem zjistil, že např. u Template::addFilter mi to udělá to samé. Je potřeba tam opravit phpdoc a potom už phpstorm chápe, že to je opravdu callable a ne jen nějaké pole.
PhpStorm totiž nechápe poziční parametry (nebo jak se tomu říká) a musí je mít pojmenované :-/
Případně by se v tomto případě mohl použít typehint callable.

Ve tvém případě je parametr mixed takže ještě horší…

Editoval CZechBoY (8. 2. 2018 15:15)

rumcais1
Člen | 80
+
+1
-

Jak se dá wrap přepsat na anonymní funkci? Pokud zkusím příklad výše dostanu odpověď Serialization of ‚Closure‘ is not allowed. Díky

David Grudl
Nette Core | 8133
+
0
-

To bohužel možné není.

rumcais1
Člen | 80
+
+1
-

Díky myslel jsem si to jen jsem to našel ještě tady na foru https://forum.nette.org/…e-a-ziskanie . Tak jsem nevěděl.