registerHelperLoader Callback ‚Helpers::loader‘ is not callable
- besir
- Člen | 170
Ahoj, zkoušel jsem podle navodu v dokumentaci implementovat do projektu Helper Loader a nějako se mi to nedaří.
<?php
namespace FrontModule;
use BeCMS\Helpers;
class FrontPresenter extends \BeCMS\BasePresenter {
/**
* (non-phpDoc)
*
* @see Nette\Application\Presenter#startup()
*/
protected function startup()
{
parent::startup();
}
protected function createTemplate($class = NULL)
{
$template = parent::createTemplate();
$template->registerHelperLoader('Helpers::loader');
return $template;
}
...
chtel jsem docilit toho abych mel helpery dostupne ve vsech Presenterech
dedicich od FrontPresenteru a nemusel tak loader vzdy volat. No jenze „zlá a
zákeřná“ laděnka mi vrací
Callback ‚Helpers::loader‘ is not callable.
Už jsem vyzkoušel vše co mě napadlo a pohledal vše co se dalo, ale asi mi dnes není z hůry dáno. Děkuju za pomoc!
Editoval besir (25. 7. 2012 14:46)
- besir
- Člen | 170
ViPErCZ napsal(a):
Zkus tam namísto __CLASS__ dát $this a metodu loader bych zkusil vyhodit static (podle planette).
Zadna zmena, původně jsem si myslel, že mám chybu v Namespace a že se na tu metodu nedostane. To jsem si otestoval. Tím to neni. Laboruju s tím celé dopoledne :-( No ted už odpoledne :D
Editoval besir (25. 7. 2012 15:30)
- besir
- Člen | 170
ViPErCZ napsal(a):
Napadá mě, že tomu překáží ten namespace. Zkusil bych ho tam nacpat taky:
$template->registerHelperLoader('BeCMS\Helpers::loader');
Super perfekt, chyba byla v Namespace, zmátlo mě to, že když jsem si udělal metodu foo() tak mi to fungovalo, ale volala sem ji normalne jako statickou metodu Helpers::foo();
Děkuju!
Shrnu pro budoucí bloudící:
Pokud používáte Nette s Namespaces a třeba různé moduly jako já
Definice helperů:
!! pozor, výše zmíněný $this místo __CLASS__ NEFUNGUJE!
<?php
namespace BesirCMS;
class Helpers
{
public static function loader($helper)
{
if (method_exists(__CLASS__, $helper))
{
return callback(__CLASS__, $helper);
}
}
public static function timeAgo($time)
{
...
Volání helperLoaderu
<?php
namespace FrontModule;
class FrontPresenter extends \BesirCMS\BasePresenter {
protected function startup()
{
parent::startup();
}
protected function createTemplate($class = NULL)
{
$template = parent::createTemplate();
$template->registerHelperLoader('BesirCMS\Helpers::loader');
return $template;
}
...
Snad to pomůže někomu dalšímu a nebudu sám trouba :D
- Filip111
- Člen | 244
Navážu na téma – už jsem měl v helperech trochu bordel, takže jsem
je taky přesunul do loaderu.
Teď ale dostávám chybu,
že Helpers::jobTitle() should not be called statically
Musí být helpery vždy statické funkce nebo nikoliv?
Např v tomto článku
z planette je příklad helperu profilePicture
kde je helper
definován jako nestatiská metoda.
Ukázka mého helperu:
(metoda catalog vrací indexované pole)
class Helpers {
private $jobsRepo;
public function __construct($jobsRepo) {
$this->jobsRepo = $jobsRepo;
}
public static function loader($helper) {
if (method_exists(__CLASS__, $helper)) {
return callback(__CLASS__, $helper);
}
}
public function jobTitle($jobId) {
$catalog = $this->jobsRepo->catalog();
if (isset($catalogg[$jobId])) {
return $catalog[$jobId];
} else
return '?';
}
}
- Filip111
- Člen | 244
Já vím, že $this ve statické metodě nelze použít, ale právě např v odkazovaném příkladu z planette je v metodě profilePicture také použité $this. Tzn. odkazovaný příklad z planette je taky blbě nebo lze vytvořit helper a volat ho pomocí helper loaderu dynamicky tak aby výše uvedený helper jobTitle fungoval?
return otazníku je možná WTF, ale jsou to namigrovaný data, který bohužel nemusí být 100% správně a pokud tam vyhodim exceptionu, uvidím ji každou chvíli.
- MartyIX
- Člen | 217
Filip111 napsal(a):
Já vím, že $this ve statické metodě nelze použít, ale právě např v odkazovaném příkladu z planette je v metodě profilePicture také použité $this. Tzn. odkazovaný příklad z planette je taky blbě nebo lze vytvořit helper a volat ho pomocí helper loaderu dynamicky tak aby výše uvedený helper jobTitle fungoval?
Neni, ty mas: public static function loader
v clanku
loader
neni static
!