The F3 instance variable which is declared at the very start of your index.php ($f3=require...
) can be retrieved anywhere in the code using the static call $f3=Base::instance()
.
Anyway, for convenience purpose, at routing time this F3 instance as well as the route parameters are passed to the route handler. Therefore, instead of defining your route handler as:
function display() {
$f3=Base::instance();
echo 'I cannot object to an object' . $f3->get('PARAMS.page');
};
you could define it as:
function display($f3) {
echo 'I cannot object to an object' . $f3->get('PARAMS.page');
};
or even better:
function display($f3,$params) {
echo 'I cannot object to an object' . $params['page'];
};
These 3 functions are absolutely identical so you should pick up the one that you understand best. But you should remember that $f3
and $params
are only passed at routing time, which means to 3 functions: the route handler, the beforeRoute() hook and the afterRoute() hook. Anywhere else in the code (including inside a class constructor), you should call Base::instance()
to retrieve the F3 instance.
PS: your question being "why do i have to pass the $f3 class to the function?", I would suggest you to rename its title to reflect it.
UPDATE: Since release 3.2.1, the F3 instance is also passed to the constructor of the route handler class:
class myClass {
function display($f3,$params) {
echo 'I cannot object to an object' . $params['page'];
}
function __construct($f3) {
//do something with $f3
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…