Nette 2.0.8 a Dibi 2.0.1 – zprovoznění a použití
- Lonanek
- Člen | 8
S Nette začínám a po několika peripetiích s QS jsem dosáhl kýženého výsledku.
Nyní se snažím (již několik dní) marně rozchodit Dibi podle zde
umístěných návodů.
Návody https://doc.nette.org/cs/database
nefungují a již nevím kam šáhnout.
Mohl by mi, prosím, někdo polopatě podat vysvětlení co vložit do
config.neon, co do bootstrap.php, jaké použití v Presenteru a jaké
v Modelu.
Dodám, že používám verzi php 5.3.13
Děkuji za reakce.
- Lonanek
- Člen | 8
config:
common:
php:
date.timezone: Europe/Prague
# session.save_path: "%tempDir%/sessions"
zlib.output_compression: yes
nette:
session:
autoStart: smart
container:
debugger: true
parameters:
services:
authenticator: Authenticator
routerFactory: RouterFactory
router: @routerFactory::createRouter
hra: Hra(@dibi.connection)
dibi:
driver: mysql
host: localhost
database: test
username: root
password:
lazy: true
production < common:
development < common:
bootstrap:
<?php
/**
* My Application bootstrap file.
*/
use Nette\Application\Routers\Route;
// Load Nette Framework
require LIBS_DIR . '/Nette/loader.php';
// Configure application
$configurator = new Nette\Config\Configurator;
// Enable Nette Debugger for error visualisation & logging
//$configurator->setProductionMode($configurator::AUTO);
$configurator->enableDebugger(__DIR__ . '/../log');
// Enable RobotLoader - this will load all classes automatically
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
->addDirectory(APP_DIR)
->addDirectory(LIBS_DIR)
->register();
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('dibi', new DibiNetteExtension);
};
// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . '/config/config.neon');
$container = $configurator->createContainer();
// Configure and run the application!
$container->application->run();
?>
Model:
class Hra extends \Nette\Object {
private $dibi;
/**
* Constructor for the table books.
* First argument is name of table.
* @param Nette\Database\Connection
*/
public function __construct(\DibiConnection $connection) {
$this->dibi = $connection;
}
// výpis všech záznamů v tabulce HRA
public function getHraAll() {
return $this->dibi ->select('*')
->from('hra')
->fetch();
}
// výpis záznamů z tabulky HRA podle ID
public function getHraByID($id) {
return $this->dibi ->select('*')
->from('hra')
->where('id=%i', $id)
->fetch();
}
}
Hláška: "Ambiguous class IDataSource resolution; "
- Lonanek
- Člen | 8
Ano 2×.
\libs\dibi-2.0.1\API-reference\IDataSource.html
\libs\dibi-2.0.1\dibi\libs\interfaces.php
Jsem z toho na prášky, ale zatím to vzdát nechci. Z gitHubu stažená verze na nižší nette a dibi chodí.
Jen ještě tak trochu mimo toto téma.
Jak obejít cizí klíče? Např. z QS $task->user->name bez použití
cizích klíčů.
- enumag
- Člen | 2118
Aha, tys totiž nakopíroval do libs nejen knihovnu, ale i API dokumentaci. Což je samozřejmě blbost. Struktura má být /libs/dibi/libs/interfaces.php. Cokoli jiného co bylo ve složce dibi-2.0.1 smaž nebo alespoň přesuň mimo libs.
Pozn. kdybys na instalaci používal composer, tak by se to nestalo i když chápu že to jako začátečník nepoužíváš.
EDIT: Jak fungují nebo nefungují cizí klíče v dibi opravdu nevím. V době jsem dibi používal tam nic takového pokud vím nebylo. :-)
Editoval enumag (7. 2. 2013 20:44)
- enumag
- Člen | 2118
Moment moment… co sem pleteš Nette\Database když používáš dibi? Ještě jsem neviděl že by někdo v rámci jednoho projektu použil obojí.
V Nette\Database cizí klíče nepotřebuješ pokud použiješ ConventionalReflection a budeš zapisovta názvy tabulek a sloupců dle definovaných konvencí.
- Martin Černý
- Člen | 5
Nenechal jsi v té dibi zároveň i minified verzi? Zkus jí smazat a uvidíš, jestli to pujde
- Tabetha
- Člen | 140
Takto by si mal predať nastavenia confige
dibi::connect(array(
'driver' => 'mysql',
'host' => 'localhost',
'username' => 'root',
'password' => '***',
));
Naozaj škaredý spôsob…ale funguje …
dibi::connect($this->context->dibi->connection->config);
Editoval Tabetha (27. 2. 2013 14:01)
- Vojtěch Dobeš
- Gold Partner | 1316
kmaci Nejsem si jistý, který rozdíl je pro tebe
důležitý :). Z dlouhodobého hlediska je lepší nepoužívat statické
dibi::
, ale volat vždy metody předávané instance. Metodu query
můžeš normálně volat i nestaticky:
$this->db->query('SELECT * FROM [table] WHERE [id] = %i', $id);