nemoznost pripojeni k databazi pomoci dibi pres model
- ali
- Člen | 342
Dneska jsem si do Nette chtel nainstalovat DIBI, po porodnich bolestech, kdy jsem zjistil, ze s mimifikovanou verzi dibi to proste nepujde jsem ztroskotal na teto chybe: Access denied for user ''@'localhost' (using password: NO)
Z teto chyby usuzuji, ze mam DIBI nainstalovanou spravne, jen se nemuze pripojit k databazi.
config.neon
nette:
database:
driver: mysql
host: 192.168.108.198
username: ales
password: GtHEVLP8fzG5PbFU
database: ales
lazy: true
charset: utf8
services:
userModel: Model\User
extensions:
dibi: DibiNette21Extension
BaseModel.php
namespace Model;
use Nette, App;
abstract class Base extends Nette\Object implements App\BaseSettings
{
protected $db;
public function __construct(\DibiConnection $database)
{
$this->db = $database;
}
}
UsersPresenter.php
class UsersPresenter extends BasePresenter
{
private $userModel;
public function injectUserModel(Model\User $userModel)
{
$this->userModel = $userModel;
}
}
Model se snazim pouzit uplne poprve, tak klidne uvitam pripominky.
- David Matějka
- Moderator | 6445
sekce nette → database v configu je pro nette\database, pro dibi pouzij sekci dibi, viz vzorovy config
- ali
- Člen | 342
super, diky moc
jeste bych mel jednu doplnujci otazku, s modelem jsem vlastne zacal delat az dneska, tak se chci zeptat jestli jsem to pochopil spravne, momentalne mam dva modely. Base, ve kterem mam zatim pripojeni k databazi a User, v kterem mam hledani uzivatelu. Pak mam presenter User, ve kterem mam vlastne tu logiku toho hledani. Zajimalo by me jestli to mam dobre rozdeleno, ze v modelu mam databazi a v prezenteru logiku a vykreslovani do sablony.
Base.php
namespace Model;
use Nette, App;
abstract class Base extends Nette\Object implements App\BaseSettings
{
protected $db;
// pripojeni k databazi
public function __construct(\DibiConnection $database)
{
$this->db = $database;
}
}
User.php
namespace Model;
class User extends Base
{
// najit konkretniho uzivatele
public function searchUser($login)
{
return $this->db->query("SELECT * FROM %n WHERE [login_clear]=%s LIMIT 1",self::TABLE_USERS,strToLower($login));
}
// najit shody mezi uzivateli
public function searchMatch($match)
{
$match = strToLower($match);
return $this->db->query("SELECT * FROM %n WHERE [login_clear] LIKE %s",self::TABLE_USERS,"%$match%");
}
}
UserPresenter.php
namespace App;
use Nette, Model;
class UsersPresenter extends BasePresenter
{
private $userModel;
public function injectUserModel(Model\User $userModel)
{
$this->userModel = $userModel;
}
public function renderMatchList($data)
{
$results = $this->userModel->searchMatch($data)->fetchAll();
$this->template->results = $results;
}
// formular pro hledani uzivatelu
protected function createComponentSearchForm()
{
$form = new Nette\Application\UI\Form;
$form->addText("login","Uživatelské jméno:")
->setRequired("Pole musíte vyplnit");
$form->addSubmit("search","Najít");
$form->onSuccess[] = $this->searchFormSuccessSend;
// design chyb
$renderer = $form->getRenderer();
$renderer->wrappers["error"]["container"] = "ul id=\"form-errors\"";
return $form;
}
// zpracovani vyhledavani
public function searchFormSuccessSend($form)
{
$values = $form->getValues();
$search = $this->userModel->searchUser($values["login"]);
if(count($search)==1)
{
$form->addError("nalezeno");
}
else
{
$searchMatch = $this->userModel->searchMatch($values["login"]);
if(count($searchMatch)>0)
{
$this->redirect("Users:MatchList",$values["login"]);
}
else
{
$form->addError("Požadované uživatelské jméno nebylo nalezeno");
}
}
}
}