nette-acl problém v Nette 2.1.1
- JanBE
- Člen | 62
Ahoj,
mám staženou poslední aktualizaci Nette-Acl od Tomáše Votruby : https://github.com/…ll/1/commits
po rozběhnutí se mi zobrazila hláška:
Nette\Database\Connection::table() is deprecated; use Nette\Database\Context::table() instead
pochopil jsem jí tak, že mám místo třídy Connection používat třídu Context
Změnil jsem tedy konstuktor Autentifikátoru ze stavu:
/**
* @param Nette\Database\Connection
*/
public function __construct(Nette\Database\Connection $database)
{
$this->database = $database;
}
na
/**
* @param Nette\Database\Connection
*/
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
a také v neonu:
z
services:
database:
class: Nette\Database\Connection
arguments: [
'%database.driver%:host=%database.host%;dbname=%database.dbname%',
%database.user%,
%database.password%
]
authenticator: AclProj\Security\Authenticator
authorizator:
class: Nette\Security\Permission
setup:
- addRole('guest')
- addRole('editor')
- addRole('admin')
- addResource('Admin:Default')
- addResource('Admin:Page')
- allow('editor', 'Admin:Default')
- allow('admin')
na
services:
database:
class: Nette\Database\Context
arguments: [
'%database.driver%:host=%database.host%;dbname=%database.dbname%',
%database.user%,
%database.password%
]
authenticator: AclProj\Security\Authenticator
authorizator:
class: Nette\Security\Permission
setup:
- addRole('guest')
- addRole('editor')
- addRole('admin')
- addResource('Admin:Default')
- addResource('Admin:Page')
- allow('editor', 'Admin:Default')
- allow('admin')
V tomto stavu mi laděnka hlásí:
Argument 1 passed to Nette\Database\Context::__construct() must be an instance of Nette\Database\Connection, string given, called in C:\wamp\www\nette-acl-master\temp\cache\_Nette.Configurator\_-c7945ac5b2060ad880adf72b991dbf3d.php on line 171 and defined
takže bude potřeba změnit argumenty volání třídy context v neonu..Ale nevím bohuže jak..Neporadil by jste mi někdo? :-)
- JDC
- Člen | 19
Teoreticky by postačilo ponechat class: Nette\Database\Connection v tom neonu. Ale takto jsem db spojení nikdy nevytvářel, kdo ví, jestli to tak jde. Ale pokud ti to na staré verzi nette tak fungovalo, tak to asi šlo. Mám ale takové tušení, že v Nette 2.1 už to tak asi touto cestou nepůjde.
Nette friendly řešení je službu database vytvářet nikoli pod services, ale pod nette, jak se píše v dokumentaci:
nette:
database:
default:
dsn: "mysql:host=<server>;dbname=<db>"
user: <user>
password: <pass>
options:
lazy: true # lazy loading. Lze vypnout - false
Pak už stačí jen přes konstruktor do modelů vecpat Nette\Database\Context a mělo by to fungovat.
- esorimer
- Člen | 114
Zdravím, přidám se k dotazu. Aktualizoval jsem na Nette 2.1.1. V configu mám
common:
nette:
database:
default:
....
programy:
dsn: sqlite:%dataDir%programy/programy.db3
service:
fooRepository: \Model\FooRepository
prgRepository: \Model\PrgRepository( @nette.database.programy , %dalsiArgument% )
fooRepository má v konstruktoru Context a ten taky dostane, prgRepository má jako první argument konstruktoru taky Context, ale dostane Connection :(
Zatím to řeším tak, že jsem změnil argument konstruktoru prgRepository na Connection a Context si vytvářím až v něm, ale to se mi moc nelíbí … Dal by se nějak předat rovnou Context?
- Mysteria
- Člen | 797
@esorimer: Předávej jako parametr @nette.database.programy.context nebo ho nepředávej vůbec:
class SomeRepository {
public function __construct($some, \Nette\Database\Context $database) {
$this->database = $database;
$this->some = $some;
}
}
service:
- SomeRepository('some')
V tomhle případě se chybějící parametry pokusí najít podle hintů.
Editoval Mysteria (10. 3. 2014 10:05)