nemoznost pripojeni k databazi pomoci dibi pres model

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ali
Člen | 342
+
0
-

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
+
0
-

sekce nette → database v configu je pro nette\database, pro dibi pouzij sekci dibi, viz vzorovy config

ali
Člen | 342
+
0
-

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");
      }
    }
  }
}