PHP klein路由器调用特殊控制器功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP klein路由器调用特殊控制器功能相关的知识,希望对你有一定的参考价值。
我正在用php实现Klein路由器,我有一点问题...我想从我的控制器调用一个特殊的函数,给它(或不)$ request变量,如下所示:
$klein->respond('GET', '/[i:id]?', HomeController::view($request));
但我有错误:Uncaught InvalidArgumentException:期望一个可调用的。有一个不可调用的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。那好吧。
如果您使用的是PHP 5.4或更高版本,则可以使用短数组语法:
$klein->respond('GET', '/[i:id]?', ['HomeController','view']);
使它更紧凑。
以上是关于PHP klein路由器调用特殊控制器功能的主要内容,如果未能解决你的问题,请参考以下文章
php [php-lib:Klein] Klein router #php
crossover.io、WAMP、twisted (+ klein) 和 django/flask/bottle 如何交互?