我正在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']);
使其更紧凑。