flame-org / Modules

Nette modules on the Steroids
http://flame-org.github.io/Modules/
GNU Lesser General Public License v3.0
13 stars 7 forks source link

Registrace maker na oncompile #20

Closed jirinapravnik closed 9 years ago

jirinapravnik commented 9 years ago

Jak jsem psal v #13 tak bohužel testy neumím pořádně, tak kdybyste někdo doplnil, abychom o to zase někdy v budoucnu nepřišli:-)

jsifalda commented 9 years ago

To určitě! :) @TomasVotruba máš napad jak to otestovat? ;)

TomasVotruba commented 9 years ago

Chce to konkrétní fail case (minimální možný kód, který se nechová dle očekávání) od @jirinapravnik. Já se teď zapojím max. komentářem.

jirinapravnik commented 9 years ago

Obyčejně nejvíce používaný to je v případ formulářových rendererů, Například když používám Nextras/Forms, který má renderer pro Bootstrap a překrývá třeba i makra input a label.

No a pak mam tedy nejaky AppModuleExtension, kde volám:

    public function getLatteMacros()
    {
        return [
            'Nextras\Forms\Bridges\Latte\Macros\BS3InputMacros',
        ];
    }

to sice proběhne, jako že v pořádku, ale ty makra nejsou překryta, takhle to vypadá vygenerované v DIC:

    public function create()
    {
        $service = new Latte\Engine;
        $service->setTempDirectory('../temp/cache/latte');
        $service->setAutoRefresh(TRUE);
        $service->setContentType('html');
        Nextras\Forms\Bridges\Latte\Macros\BS3InputMacros::install($service->getCompiler());;
        $service->onCompile = $this->container->getService('1.manager')->createEvent(array('Latte\\Engine', 'onCompile'), $service->onCompile);
        return $service;
    }

teď už to proběhne v pořádku, makra jsou překryta, a DIC vypadá takto:

    public function create()
    {
        $service = new Latte\Engine;
        $service->setTempDirectory('/../temp/cache/latte');
        $service->setAutoRefresh(TRUE);
        $service->setContentType('html');
        $service->onCompile[] = function($engine) { Nextras\Forms\Bridges\Latte\Macros\BS3InputMacros::install($engine->getCompiler()); };
        $service->onCompile = $this->container->getService('1.manager')->createEvent(array('Latte\\Engine', 'onCompile'), $service->onCompile);
        return $service;
    }
jsifalda commented 9 years ago

Přidal jsem základní test... nebyl jsem si jist, jak nejlépe to otestovat, takže kdyby měl někdo lepší nápad, tak je vitaný :)