Callback ‚Model\BaseModel::initialize()‘ is not callable

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

Ahoj, nějak nemlžu přijít na to, proč pořád dostávám hlášku
Callback ‚Model\BaseModel::initialize()‘ is not callable. Snažím se pomocí ACL tutoriálu rozchodit aplikaci, ale tady mi to havaruje. Cesta vč. namespace je imho dobře.
v bootstrapu mám

$application->onStartup[] = 'Model\BaseModel::initialize()';

a BaseModel

namespace Model;

use Nette\Object;
use Nette\Environment;
use Nette\Database\Connection;

class BaseModel extends Object {

    /** @var Nette\Database\Connection */
    protected static $connection = null;

    public static function initialize()
    {
        $dbConfig = Environment::getConfig('database');
        self::$connection = new Connection(
            "{$dbConfig->driver}:host={$dbConfig->host};dbname={$dbConfig->database}",
            $dbConfig->username,
            $dbConfig->password
        );
    }

}

Nette 2.0 revision 539fdec
Díky za tipy

jtousek
Člen | 951
+
0
-

Smaž závorky.

$application->onStartup[] = 'Model\BaseModel::initialize';
Royce
Člen | 15
+
0
-

To bohužel nepomáhá
Callback ‚Model\BaseModel::initialize‘ is not callable.
temp jsem promazal…

jtousek
Člen | 951
+
0
-

A přidej zpětný lomítko.

$application->onStartup[] = '\Model\BaseModel::initialize';
Royce
Člen | 15
+
0
-

taky ne :-(

//edit: to skoro vypadá jako by ho neviděl robotloader.. když siv laděnce najedu includované soubory, tak tam není

ale měl by.. conf:

service:
	Nette\Loaders\RobotLoader:
		option:
			directory: [%appDir%]
			directory: [%libsDir%]
		run: true

Editoval Royce (19. 4. 2011 0:04)

craz
Člen | 34
+
0
-

nepomoze zmazat apostrofy?

jtousek
Člen | 951
+
0
-

craz: Blbost. PHP by ti hodilo syntax error.

Royce: Tak touž je vážně divný. Jsem si už jistý, že ten callback je napsanej správně, tohle už musí být vážně problém loaderu. Co to udělá když přidáš do bootstrapu napevno require_once na soubor s tou třídou?

Filip Procházka
Moderator | 4668
+
0
-

Co to řve takhle?

$application->onStartup[] = callback('\\Model\\BaseModel', 'initialize');

Hele teď koukám, že to připojuješ do application, to máš jako v bootstrap? A máš ten BaseModel v App a máš tam správně zaindexovaný robotloader?

Co ti vypíše, když vložíš tohle před ten řádek s $application->onStartup[]

dump(class_exists('Model\BaseModel')); die('e?');

?

Kyslik
Člen | 15
+
0
-

Rad se pripojim se stejnym problemem.

<?php
dump(class_exists('Model\BaseModel')); die('e?');
?>

Vypisuje FALSE, ale trida samotna v adresarove strukture je: /app/models/BaseModel.php

<?php
namespace Model;

use Nette\Object,
    Nette\Environment,
    Nette\Database\Connection;

class BaseModel extends Object
{
    /** @var Nette\Database\Connection */
    protected static $connection = null;

    public static function initialize()
    {
        $dbConfig = Environment::getConfig('database');
        self::$connection = new Connection(
            "{$dbConfig->driver}:host={$dbConfig->host};dbname={$dbConfig->database}",
            $dbConfig->username,
            $dbConfig->password
        );
    }
}
?>

V Configu:

common:
php:
date.timezone: Europe/Prague
session.save_path: „%tempDir%/sessions“

service:
Nette\Loaders\RobotLoader:
option:
directory: [%appDir%]
directory: [%libsDir%]
run: true

Nette\Security\IAuthorizator: AclProj\Security\Acl
Nette\Security\IAuthenticator: AclProj\Security\Authenticator

database:
driver: mysql
host: localhost
database: ***
username: ***
password: ***

security:
salt: ***

production < common:

development < common:

Stale jedna a ta sama chyba. Povedlo se to nekomu rozchodit?

jtousek
Člen | 951
+
0
-

Zkus v bootstrapu na začátku manuálně requirnout soubor s tou třídou. Pokud chyba zmizí, je problém nejspíše v konfiguraci RobotLoaderu.

Kyslik
Člen | 15
+
0
-

Je to tak, kdyz dam require_once s danou tridou, najde ji to a dalsi tridu v nacitani to zase nenajde, po require_once dane tridy to pokracuje stejne. Jak tedy upravit RobotLoader?

Kyslik
Člen | 15
+
0
-

FIXED
oprava v NEONu

Nette\Loaders\RobotLoader:
	option:
		directory: **[%appDir%, %libsDir%]**
	run: true