2013-11-12 2 views
0

Мы следим за начатым учебным пособием по адресу github, все прошло хорошо, но мы привязаны к соединению DB.Fat free framework: DB query - non-object

Мы создали объект $ DB:

$db=new DB\SQL(
    'mysql:host=localhost;port=3306;dbname=liselore', 
    'jow', 
    '' 
); 

И мы создали контроллер:

$f3->route('GET /', 
function($f3) { 

    $f3->set('result',$db->exec('SELECT achternaam FROM test1')); 

    $template = new Template; 
    echo $template->render('views/homepage.html'); 

    } 
); 

$f3->run(); 

Однако, мы получаем эту ошибку:

Internal Server Error 

Fatal error: Call to a member function exec() on a non-object 

• fatfree-master/index.php:32 

Я думаю, ошибка относится к объекту $ db, который не задан. Однако у нас есть набор php-pdo, я просто проверил через phpinfo().

Любая помощь будет большим, ТНХ ...

+0

попробуйте добавить 'глобальный $ дб,' после этой строки 'функции ($ f3) {' - вы есть проблема Scope – Latheesan

+0

Thx для ваш ответ, но все переменные, заданные с помощью метода $ f3-> set, глобальны, см. https://github.com/bcosca/fatfree#framework-variables – Liz

+0

Мы используем тот же код, что и примеры в учебнике: https://github.com/bcosca/fatfree#databases – Liz

ответ

2

Вы используете closure, который не означает, что переменная $db больше не scope. Вам нужно использовать use keyword, чтобы сообщить PHP, чтобы разрешить использование переменной из родительской области.

$f3->route('GET /', function($f3) use ($db) { 
    $f3->set('result', $db->exec('SELECT achternaam FROM test1')); 

    $template = new Template; 
    echo $template->render('views/homepage.html'); 
}); 

$f3->run(); 
1

Вы уже это сказали:

all variables set using the $f3->set method are global

и да, это обычная практика, чтобы сохранить такие объекты в той рамке варов. Так просто попробовать

$f3->set('DB', $db=new DB\SQL('mysql:host=localhost;port=3306;dbname=liselore','jow','')); 

и использовать везде:

$f3->set('result',$f3->get('DB')->exec('SELECT achternaam FROM test1'));