Database instance in RouterFactory
Notice: This thread is very old.
- ivopisarovic
- Member | 5
Hello,
is it possible to get a link to the database instance in RouterFactory? I have
tried it in the FILTER callback and also creating own route, but always: “Call
to a member function table() on a non-object”. Bootstrap is standard from
Nette 2.2.1 sandbox. DB connection set in config.local.neon.
Thanks for help.
class PageRoute extends \Nette\Application\Routers\Route{
/** @var \Nette\Database\Context */
protected $db;
public function match(HttpRequest $request){
$id = $request->getQuery('id');
if(!is_numeric($id)){
$page = $this->db->table('menu')->where('url', $id)->fetch();
if($page == NULL){
return NULL;
}
... following code....
Last edited by ivopisarovic (2014-09-25 18:56)
- Quinix
- Member | 108
You have to inject it to RouteFactory and pass it to your custom route manually:
<?php
namespace App;
class RouterFactory
{
private $connection;
function __construct(\Nette\Database\Context $connection)
{
$this->connection= $connection;
}
public function createRouter()
{
$router = new RouteList();
$router[] = new PageRoute($this->connection);
///...
return $router;
}
}
?>
- Jan Tvrdík
- Nette guru | 2595
Because PageRoute
is subclass of Route
, setter
injection is most likely preferred.
- ic
- Member | 430
Quinix wrote:
You have to inject it to RouteFactory and pass it to your custom route manually:
<?php namespace App; class RouterFactory { private $connection; function __construct(\Nette\Database\Context $connection) { $this->connection= $connection; } public function createRouter() { $router = new RouteList(); $router[] = new PageRoute($this->connection); ///... return $router; } } ?>
If I try this one… it says ‘Using $this when not in object context’.