Fat-Free-Framework global variables and functions

fat-free-framework, function, global-variables, php, routes

Solution

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
    }
}

Problem

I'm new to fat free framework and i'm a little bit confused about the global variables. ``` $f3->route('GET /@page','display'); function display($f3) { echo 'I cannot object to an object' . $f3->get('PARAMS.page'); }; $f3->run(); ``` Here i'm using GET /@page as a token for the url route. In the function i then use $f3->get('PARAMS.page') to get the value of that variable. Since $f3->get is the method to get a global variable, why do i have to pass the $f3 class to the function. The below code doesn't work ($f3 class not passed to the function). ``` $f3->route('GET /@page','display'); function display() { echo 'I cannot object to an object' . $f3->get('PARAMS.page'); }; $f3->run(); ``` So my question is: why do i have to pass the $f3 class to the function? Thx...

Original source

Related problems