Problém se spojení s databází Nette\Database\Connection
- kreed
- Člen | 13
Zdravím,
mám problém, ze kterého jsem zoufalí.. řeším to už půl dne, přiom je
to triviální…
Nemůžu se asi spojit s databází na wedosu
Mám základní repositář kde vytvářím připojení Repository.php:
<?php
namespace App\Model;
use Nette;
abstract class Repository extends \Nette\Object {
/** @var Nette\Database\Context */
protected $dbase;
public function __construct(Nette\Database\Context $dbase) {
$this->dbase = $dbase;
}
public function getTable( ) {
return $this->dbase->table( 'articles' );
}
}
?>
Call to a member function table() on a non-object
config.neon vypadá:
<?php
parameters:
php:
date.timezone: Europe/Prague
application:
errorPresenter: Error
mapping:
*: App\*Module\Presenters\*Presenter
session:
expiration: 14 days
services:
router: App\RouterFactory::createRouter
#komponenty
- \komponent\IArticleListFactory
#Repositare
- App\Model\ArticlesRepository
?>
Žádná složitost :(
a nakonec config.local.neon v sobě má:
<?php
parameters:
database:
dsn: 'mysql:host=wm98.wedos.net;dbname=d29551_newlex'
user: user
password: *****
options:
lazy: yes
?>
Jméno, heslo, host všechno sedí, to mám je potvrzeno, zkoušel jsem i jiné, funkční a porad nic…
Víc věcí co se týče spojení s DB tam nemám, přitom v jiné verzi Nette mi to krásně šlape, ale tam byla deklarace spojení s DB ještě v config.neon, nevím jestli se něco zásadně změnilo v novém Nette, nebo co dělám špatně… Poraďte mi, nebo si vytrhám všechny vlasy :D
- Pavel Kravčík
- Člen | 1196
Ještě otázka, nezkoušíš to z lokálu? Wedos nedovolí připojení z jiných míst, než z Wedosu myslím.
- kreed
- Člen | 13
Tek jeste jednou:
Repository.php
<?php
namespace App\Model;
use Nette;
abstract class Repository extends \Nette\Object {
/** @var Nette\Database\Context */
protected $dbase;
public function __construct(Nette\Database\Context $dbase) {
$this->dbase = $dbase;
}
public function getTable( $table ) {
return $this->dbase->table( $table );
}
}
?>
NA to je nalepen BaseArticlesRepository.php:
<?php
abstract class BaseArticlesRepository extends Repository {
protected $table = 'articles';
public function __construct() {
parent::__construct();
}
public function getTable( $table = null) {
if( $table ) {
parent::getTable($table);
}
parent::getTable($this->table);
}
}
?>
a pak Konstruktor ArticlesRepository vypada nasledovne:
<?php
class ArticlesRepository extends BaseArticlesRepository {
public function __construct() {
parent::__construct();
}
public function getArticleList( ) {
return $this->getTable();
}
}
?>
- kreed
- Člen | 13
Pavel Kravčík napsal(a):
Ještě otázka, nezkoušíš to z lokálu? Wedos nedovolí připojení z jiných míst, než z Wedosu myslím.
Jo a nee… nedelam to z lokalu, delam to primo na FTP wedos, taakze na povolenem serveru… Vse je pod jednim hostingem, tzn, jak databaze tak uloziste aplikace, takze by to melo jit
- Oli
- Člen | 1215
@kreed však ti o tý chybě už říkal @F.Vesely
A jak vypada konstruktor ArticlesRepository? Volas v nem parent::__construct($dbase);?
Ty musíš jako service do configu uložit ten poslední prvek s kterým
prcuješ, tedy ArticleRepository
a předat mu jako závislost
Context
a ten Context ti potom musí probublat až do
Repository
. Takže budeš mít tohle v ArticleRepository
i BaseArticleRepository
public function __construct(Nette\Database\Context $dbase) {
parent::__construct($dbase);
}
- kreed
- Člen | 13
AAAAAno… mohly za to ty konstruktory… Už to jede, slava :) … Stačilo smazat konstruktory a nechat jen ve výchozím Repositary.php se spojením s DB a jede jako po másle… Díky všem za ochotu, navedli jste mě na správnou cestu… Vlasy mi začínají zase dorůstat :) … pekny Vánoce a šťastný nový rok Vám všem …