自定义路由无法正常工作[F3]

时间:2016-11-18 15:36:44

标签: php fat-free-framework

自定义路线无法正常工作,并始终路由至 user.htm

的index.php

$routes = [
  "/" =>  "index.htm",
  "/user/id=@id" => "user.htm","/user/@id" => "user.htm",
];

foreach ($routes as $path => $file) {
  $f3->route("GET ".$path,
    function($f3){
      global $file,$path;
      echo View::instance()->render($file);
    }
  );
}

2 个答案:

答案 0 :(得分:1)

试试这个:

$routes = [
  "/" => "index.htm",
  "/user/id=@id" => "user.htm",
  "/user/@id" => "user.htm",
];

foreach ($routes as $path => $file)
{
  $f3->route("GET " . $path,
    function ($f3) use ($file)
    {
      echo View::instance()->render($file);
    }
  );
}

答案 1 :(得分:1)

Bryan Velastegui的回答是正确的。但是,这就是为什么你的代码没有工作的原因:

  1. $f3->route()将每个路由URI映射到一个函数(称为"路由处理程序"),而不执行它
  2. foreach循环将以下值连续存储到$file变量中:index.htmluser.htmuser.htm(再次)。因此,在循环结束时,$file保留user.htm
  3. 一旦调用$f3->run(),框架就会执行与当前路由匹配的路由处理程序,当前路由本身引用全局$file变量,持有user.htm
  4. 通常,您不应该使用global关键字。这只会产生意想不到的问题,就像你所面临的问题一样。这对代码可维护性也没有帮助。

    我建议您阅读有关use keyword的文档,以了解Bryan Velastegui的代码是如何工作的。