2

在遵循这段代码时

    $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();

来自https://github.com/bcosca/fatfree#routing-engine上的 Fat-Free Framework 示例,我在浏览器中收到此错误:

    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 没有作为参数传递给函数,但我不明白为什么。有谁能够帮我?

4

1 回答 1

3

我只是同样的情况!我使用的是 SourceForge 的 3.0.1 版。我尝试了以下方法,它有效,但产生了其他问题:

$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 。这是一个非常快速的修复!

于 2013-01-06T01:00:47.860 回答