Vývojová verze nefunguje rozdělení pomocí Extension
- zool
- Člen | 144
Ahoj mám problém u vývojové verze
rozdělil jsem si projekt pomocí Extension
v bootstrap mám
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('shop', new \ShopExtension);
};
ve třídě ShopExtension
class ShopExtension extends \Nette\Config\CompilerExtension
{
public $defaults = array(
"itemsPerPage" => 20,
"order" => 'nazev',
"vyrobce" => -1,
"view" => 1
);
public function loadConfiguration()
{
$config = $this->getConfig($this->defaults);
$builder = $this->getContainerBuilder();
$this->compiler->parseServices($builder, $this->loadFromFile(__DIR__ . '/../config/shop.neon'));
$builder->getDefinition($this->prefix('data'))
->addSetup('setDefaults', array($config));
}
}
v configu mám jen
services:
shop.data:
class: \Nastaveni\DataShop(@session)
factories:
no a když zavolám třeba v base presenter
$this->context->shop->data
tak to vyhodí vyjímku, že služba shop není definovaná
Děkuji
- Majkl578
- Moderator | 1364
A je? Já ji nikde definovanou nevidím. Definoval jsi pouze službu
shop.data, nikoliv shop.
Správný přístup je tedy $context->getService('shop.data')
,
popř. $context->{'shop.data'}
. Samozřejmě používání
kontextu v rámci presenteru není úplně OK po stránce DI, proč
nepoužiješ inject metody?
(Hint: Jinak asi toužíš po NestedAccessoru, který byl nedávno zrušen.)
- zool
- Člen | 144
Aha, právě že ve verzi 2.0.8 mi to funguje a právě u vývojové verze
to kolabuje. Já myslel, že právě context je tam pro vytahování služeb, a
v té inject metodě taky použiji context nebo ne? Nebo container? A jak se
tedy pak dostanu do toho prostředí shop?? Když si v něm definuji
službu?
Díky
- zool
- Člen | 144
To ano, ale když použiji toto
/** @var HttpRequest */
protected $httpRequest;
public function injectRequest(\HttpRequest $request)
{
if( $this->httpRequest )
{
throw new \Nette\InvalidStateException("Http has already been set");
}
$this->httpRequest = $request;
}
tak mi to nefunguje.
Nápiše mi to právě No service of type HttpRequest found.
Editoval zool (15. 1. 2013 19:12)