php klein路由器调用特殊控制器功能



我正在php中实现klein路由器,我有一个小问题...我想从控制器中调用特殊功能,给它(或不)$请求变量:

$klein->respond('GET', '/[i:id]?', HomeController::view($request));

但是我有错误:未接收到的无效Exception:期望可可。有一个无容易的null 所以我将代码更改为:

$klein->respond('GET', '/[i:id]?', new HomeController::view($request));

现在错误是这个错误:语法错误,意外的"视图"(t_string),期望变量(t_variable)或'$'>最后,我找到了这样写的解决方案:

$klein->respond('GET', '/[i:id]?', function($request){ HomeController::view($request); });

这个正在工作,但我觉得我缺少一些东西...我想分解这个问题,有没有解决方案?谢谢你

尝试以下:

$klein->respond('GET', '/[i:id]?', array('HomeController','view'));

在klein示例中,例如在您的第三个示例中,我们通过闭合,匿名功能,lambda或其他要称呼的函数。无论如何,由于我们在内联声明它,因此我们必须指定参数。

另一方面,HomeController::view在其自己的声明中指定了其参数。如果将参数内联(例如在第一个和第二个示例中)中排列,则实际上是在该行上调用view功能。您想将功能传递给$klein,以后要调用,这是我上面的示例应该做的。

klein的respond功能采用PHP所指的可调用功能。事实证明,有一百万个方法可以在PHP中指定可可:

http://php.net/manual/en/language.types.callable.php

我认为您可以做$klein->respond('GET', '/[i:id]?', HomeController::view);,但这似乎是不正确的。它在Python中起作用,但不起作用。哦,好。

如果您使用的是PHP 5.4或更高版本,则可以使用简短的数组语法:

$klein->respond('GET', '/[i:id]?', ['HomeController','view']);

使其更紧凑。

最新更新