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

laravel特殊功能代码片段集合

crossover.io、WAMP、twisted (+ klein) 和 django/flask/bottle 如何交互?

Klein应用程序延期

克莱因 url 路由器在 XAMPP 上不起作用

如何在 PHP“回声”中插入带有撇号和其他特殊字符的文本? [复制]