Předání závislostí do MacroSetu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Martin Vaněk
- Člen | 10
Dobrý den všem,
dostal jsem se na další hranici Nette, kde si bohužel nedokážu poradit sám a proto se ptám. Jen pro ujištění, s Nette pracuji teprve druhý týden a snažil jsem se odpovědi najít v diskusi. Bezvýsledně.
Mám následující makro –
<?php
namespace App\Macros;
use App\Managers\WarehouseManager;
use Latte\Compiler;
use Latte\MacroNode;
use Latte\Macros\MacroSet;
use Latte\PhpWriter;
/**
* Class WarehouseMacros
* @package App\Macros
*/
class WarehouseMacros extends MacroSet
{
/** @var WarehouseManager */
private $warehouseManager;
public static function install(Compiler $compiler)
{
$latteCompiler = new static($compiler);
$latteCompiler->addMacro('onStock', array($latteCompiler, 'macroOnStock'));
}
public function macroOnStock(MacroNode $node, PhpWriter $writer)
{
$node->modifiers = preg_replace('#\|safeurl\s*(?=\||\z)#i', '', $node->modifiers);
return $writer->using($node, $this->getCompiler())
->write("echo %escape('asds')");
}
/**
* @param WarehouseManager $warehouseManager
*/
public function setWarehouseManager($warehouseManager)
{
$this->warehouseManager = $warehouseManager;
}
}
Které registruji v config.neon takto –
nette.latteFactory:
setup:
- 'App\Macros\WarehouseMacros::install(?->getCompiler())'(@self)
- addFilter('onStock')
Jak je vidět v kódu MacroSetu, potřebuji tam nějak elegantně procpat WarehouseManager, který mám zaregistrovaný jako službu. Mohl by mě někdo navést, zda to takhle půjde, nebo musim vytvořit rozšíření? Vedl jsem se podle tohoto tématu. Nicméně tam Macro není na ničem závislé.
Děkuji předem.
- Zax
- Člen | 370
Střílím trochu od boku, ale mohlo by to jít nějak takhle:
services:
warehouseManager: App\Managers\WarehouseManager
nette.latteFactory:
setup:
- 'App\Macros\WarehouseMacros::install(?->getCompiler(), ?)'(@self, @warehouseManager)
- addFilter('onStock')
+ přidat parametr do metody install a přetížit konstruktor.
Editoval Zax (28. 4. 2015 20:58)