Nefunkční metody inject* při dědění presenterů
- SvvimX
- Člen | 65
Ahoj, mám následující kód a dokud neinjectuju service cache do
presenteru, vše funguje, při přidání injectCache dostanu
Notice: Trying to get property of non-object
v souboru:
File: ...\libs\schmutzka\gettexttranslator\GettextTranslator\Panel\Panel.php
což mi přijde jako nesmysl.
Je tedy nějaké omzeneí na inject metody? Něco mi patrně uniká…
config.neon
services:
cache: \Nette\Caching\Cache ( @cacheStorage, "forminfoeu" )
translator: @gettextTranslator.translator
abstract class BasePresenter extends \Nette\Application\UI\Presenter
{
/** @persistent */
public $lang;
/** @var GettextTranslator\Gettext */
protected $translator;
/**
* @param GettextTranslator\Gettext
*/
public function injectTranslator( \GettextTranslator\Gettext $translator)
{
$this->translator = $translator;
}
}
abstract class DefaultPresenter extends \BasePresenter
{
/**
*
* @var Cache
*/
protected $cache;
/**
*
* @param \Nette\Caching\Cache $cache
*/
public function injectCache ( \Nette\Caching\Cache Cache $cache )
{
$this->cache = $cache;
}
}
- SvvimX
- Člen | 65
když jsem v bootstrapu dal
$configurator->setDebugMode(false);
aby se mi zalogovala
vyjímka, kterou bych někam uploadnul, tak vypadla uplně jiná vyjímka, než
kterou vidím na obrazovce při zaplém debugModu.
V zaplém debugModu vidím chybu, která tvrdí chybu v Schmutzkově
translatoru, ale vyjímka, která se zalogovala bez debug modu tvrdí:
Multiple services of type Nette\Caching\Cache found
což už by
dávalo skoro smysl, jen že já v configu jinou cache nemám
neon:
#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning
#
common:
parameters:
currency: CZK
vat: 1.0
database: #OSTRA DATABAZE !
driver: pdo_mysql
host: localhost
dbname: aaa
user: root
password:
charset: utf8
collation: utf8_czech_ci
php:
date.timezone: Europe/Prague
session.save_path: "%tempDir%/sessions"
# zlib.output_compression: yes
nette:
session:
autoStart: smart
gc_maxlifetime: 1409600
doctrine:
connection: %database%
console: true
migrations:
connection: @doctrine.connection
services:
cache: \Nette\Caching\Cache ( @cacheStorage, "projekt" )
database: @doctrine.entityManager
DAOFactory: \myproject\DAO\DAOFactory ( @database )
authenticator: \myproject\Security\Authenticator( @DAOFactory )
authorizator: \myproject\Security\Authorizator( @DAOFactory, @cache )
translator: @gettextTranslator.translator
entitySerializer: \Bgy\Doctrine\EntitySerializer( @database )
eSection:
class: \Nette\Http\SessionSection(@session, 'exchange')
setup:
- setExpiration('+14 days')
eStorage:
class: \h4kuna\Storage
exchange:
class: \h4kuna\Exchange
setup:
- setVat(%vat%)
- loadCurrency(%currency%, {decimal: 0, symbol: Kč})
- loadCurrency('eur', {symbol: € })
userManager: \myproject\Manager\UserManager ( @DAOFactory, @entitySerializer )
stateManager: \myproject\Manager\StateManager ( @DAOFactory, @entitySerializer )
roleManager: \myproject\Manager\RoleManager ( @DAOFactory, @entitySerializer )
resourceManager: \myproject\Manager\ResourceManager ( @DAOFactory, @entitySerializer )
permissionManager: \myproject\Manager\PermissionManager ( @DAOFactory, @entitySerializer )
categoryManager: \myproject\Manager\CategoryManager ( @DAOFactory, @entitySerializer )
pageManager: \myproject\Manager\PageManager ( @DAOFactory, @entitySerializer )
langManager: \myproject\Manager\LangManager ( @DAOFactory, @entitySerializer )
gettextTranslator:
lang: cs
files:
web: %appDir%/lang #
# optional with defaults
layout: horizontal # or: vertical
height: 450
factories:
production < common:
development < common:
parameters:
database:
dbname: db
user: root
password:
- David Matějka
- Moderator | 6445
ale nette jo lepsi je injectovat jen IStorage a Cache si vytvaret rucne.
ale vetsinou neni cache v presenteru vubec potreba, radeji at se o cachovani stara ta konkretni sluzba. na co tam potrebujes cache?
- SvvimX
- Člen | 65
injectovat jen storage znamená, že při vyváření cache mi jich vznikne několik, takle sem si v configu hlídal jeden namespace pro cache pro celou aplikaci, přišlo mi to lepší, nevím.
Na co potřebuji v presenteru cache? Vytvářím menu pomocí pluginu Navigation a chtěl jsem kategorie a stránky mít v cache, aby se vždy nenačítali z DB.
A proč vidím jinou chybu v debugModu než se mi pak zaloguje bez něj?