Zprovoznění dibi v Nette 2.0

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Lukáš Růžička
Člen | 15
+
0
-

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

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

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

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)

Majkl578
Moderator | 1364
+
0
-

Proč chodíme kolem horké kaše?

Lukáš Růžička
Člen | 15
+
0
-

Díky za navedení chlapi, už mi to funguje!

reskator
Člen | 18
+
0
-

Nevěděl by někdo, jak přepsat bootstrap a případně config v poslední verzi nette? Třeba na tom příkladu, co zde uvádí desss…