Zprovoznění dibi v Nette 2.0
- Lukáš Růžička
- Člen | 15
Ahoj,
po 3 dnech pokusů, které bohužel nevedly k očekávanému výsledku se na
Vás obracím s prosbou o pomoc.
Rozhodl jsem se svůj aktuálně vyvíjený projekt psát kompletně v Nette. Dříve jsem používal ve svých aplikacích Nette Forms a dibi, ale vždy samostatně, nikdy jakou součást Nette FW.
V čem je problém. Nejsem schopen rozběhat Nette 2.0 společně s dibi. Zprovoznění Nette\Database se mi podařilo, ale chci používat dibi.
Našel jsem ZDE návod, který by měl fungovat. Mě se ale bohužel podle něj dibi zprovoznit nepodařilo.
Proto prosím o vzorovou ukázku, jak má vypadat config.neon, připojení k DB v bootsrapu, případně následné vzorové použití v modelu.
Pravděpodovně stačí malá úprava toho, co už mám hotového a kde mi funguje Nette\Database, proto přikládám mé soubory:
config.neon
<?php
#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning
#
common:
php: # PHP configuration
date.timezone: Europe/Prague
# session.save_path: "%tempDir%/sessions"
# zlib.output_compression: yes
services:
robotLoader:
run: true
database:
class: Nette\Database\Connection
arguments: ['mysql:host=localhost;dbname=dbname', 'login', 'pswd']
model:
class: Model
arguments: ["@database"]
authenticator:
factory: ["@model", createAuthenticatorService]
production < common:
development < common:
console < common:
?>
bootstrap.php
<?php
/**
* My Application bootstrap file.
*/
use Nette\Diagnostics\Debugger,
Nette\Application\Routers\Route;
// Load Nette Framework
require LIBS_DIR . '/Nette/loader.php';
// Enable Nette\Debug for error visualisation & logging
Debugger::$strictMode = TRUE;
Debugger::enable();
// Load configuration from config.neon file
$configurator = new Nette\Configurator;
$container = $configurator->loadConfig(__DIR__ . '/config.neon');
// Setup router
$router = $container->router;
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
// Configure and run the application!
$application = $container->application;
//$application->catchExceptions = TRUE;
$application->errorPresenter = 'Error';
$application->run();
?>
Model.php
<?php
/**
* Model base class.
*/
class Model extends Nette\Object
{
/** @var Nette\Database\Connection */
public $database;
public function __construct(Nette\Database\Connection $database)
{
$this->database = $database;
}
public function getMotivy()
{
return $this->database->table('katalogMotivy');
}
}
?>
Používám Nette 2.0 beta php 5.3 a dibi 1.5 rc.
Používám adresářovou strukturu odpovídající sandboxu a primárním
cílem je vypsat na homepage data z DB při použití dibi.
Díky za pomoc, případně navedení.
Lukáš Růžička
- Patrik Votoček
- Člen | 2221
Možná by stálo za to napsat kde přesně je problém. Jinak řečeno co „nefunguje“. (Co to hlásí/nehlásí/dělá/nedělá).
Do vyhledávacího políčka nahoře na této stránce jsem zadal dibi
připojení Nette 2
a heleme se.
- desss
- Člen | 14
byl jsem na tom úplně stejně, taky se mi nelíbilo Nette\Database a chtěl sem používat dibi na kterou sem byl zvyklý z dřívějška. (taky jsem na nette2 přesel teprve nedávno a dříve pracoval s NForms a částečně nette0.9). s pomocí od ostatních se mi povedlo sesmolit následující konfiguraci:
<?php
config.neon
-----------
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning
#
common:
php: # PHP configuration
date.timezone: Europe/Prague
# session.save_path: "%tempDir%/sessions"
zlib.output_compression: yes
default_charset: "UTF-8"
services:
database:
class: DibiConnection
arguments: [%database%]
authenticator:
class: Authenticator
authorizator:
class: Acl
robotLoader:
run: true
production < common:
database:
driver: mysql
host: mysql5
database: database
username: username
password: password
profiler: true
charset: utf8
development < common:
database:
driver: mysqli
host: localhost
database: db_name
username: username
password: password
profiler: true
lazy: true
charset: utf8
bootstrap.php:
--------------
use Nette\Diagnostics\Debugger,
Nette\Application\Routers\Route;
// Load Nette Framework
$params['libsDir'] = __DIR__ . '/../libs';
require $params['libsDir'] . '/Nette/loader.php';
// Enable Nette Debugger for error visualisation & logging
Debugger::$logDirectory = __DIR__ . '/../log';
Debugger::$strictMode = TRUE;
Debugger::enable();
// Load configuration from config.neon file
$configurator = new Nette\Configurator;
$configurator->container->params += $params;
$configurator->container->params['tempDir'] = __DIR__ . '/../temp';
$container = $configurator->loadConfig(__DIR__ . '/config.neon');
// Connect to database via DIBI
dibi::connect($container->params['database']);
// Setup router
$router = $container->router;
$router[] = new Route('index.php', 'Default:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Default:default');
// Configure and run the application!
$application = $container->application;
//$application->catchExceptions = TRUE;
$application->errorPresenter = 'Error';
$application->run();
?>
v modelu už žádný připojení nenastavuju, pracuju s databází přes dibi::query, příp. dibi::select
- 22
- Člen | 1478
ta služba database
je tam zbytečná, když ses voláním
statického dibi::connect
vyhnul použití DI.
jinak stačí v configu toto:
common:
database:
profiler: true
lazy: true
production < common:
database:
host: mysql5
database: database
user: username
pass: password
development < common:
database:
database: db_name
user: username
pass: password
jinak lazy
připojení je dobré pro produkci, nejen pro
development.
Editoval 22 (2. 10. 2011 2:52)