Обезжиренная структура Отсутствует аргумент 1 для {close}()

следуя этому фрагменту кода

    $f3=require('lib/base.php');

    $f3->route('GET /brew/@count',
        function($f3) {
            echo $f3->get('PARAMS.count').' bottles of beer on the wall.';
        }
    );
    $f3->run();

из примеров Fat-Free Framework на https://github.com/bcosca/fatfree#routing-engine Я получаю эту ошибку в своем браузере:

    Internal Server Error

    Missing argument 1 for {closure}()

    * /var/www/f3/index.php:36 Base->{closure}
    * /var/www/f3/lib/base.php:972         
    * Base->call(Closure::__set_state(),NULL,'beforeroute,afterroute')
    * /var/www/f3/index.php:40 Base->run()

Я знаю, что проблема в том, что $f3 не передается функции в качестве параметра, но я не понимаю, почему. Кто-нибудь может мне помочь?


person EnRyYyYy    schedule 25.12.2012    source источник


Ответы (1)


у меня точно такая же ситуация! Я использовал версию 3.0.1 от SourceForge. Я попробовал следующее, что сработало, но создало другие проблемы:

$f3=require('lib/base.php');

$f3->route('GET /brew/@count',
    function() use ($f3) {
        echo $f3->get('PARAMS.count').' bottles of beer on the wall.';
    }
);
$f3->run();

Предложение use (которое не очень хорошо задокументировано в php) позволяет вам использовать переменные из родительской области видимости из анонимной функции. Подробнее читайте здесь: Закрытие и анонимная функция (разница?)

Попробуйте обновить ядро ​​F3 до последней версии. Один из разработчиков порекомендовал перейти на версию 3.0.2 отсюда: https://github.com/bcosca/fatfree. Это было очень быстрое решение!

person Ted    schedule 06.01.2013