PHP klein路由器调用特殊控制器功能
PHP klein router call special controller function
我正在 php 中实施 Klein 路由器,但我遇到了一个小问题...
我想从我的控制器调用一个特殊的函数,给它(或不)像这样的 $request 变量:
$klein->respond('GET', '/[i:id]?', HomeController::view($request));
但我有错误:未捕获 InvalidArgumentException:需要一个可调用对象。得到一个不可调用的 NULL
所以我将代码更改为:
$klein->respond('GET', '/[i:id]?', new HomeController::view($request));
现在的错误是:语法错误,意外的 'view' (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 路由器,但我遇到了一个小问题... 我想从我的控制器调用一个特殊的函数,给它(或不)像这样的 $request 变量:
$klein->respond('GET', '/[i:id]?', HomeController::view($request));
但我有错误:未捕获 InvalidArgumentException:需要一个可调用对象。得到一个不可调用的 NULL 所以我将代码更改为:
$klein->respond('GET', '/[i:id]?', new HomeController::view($request));
现在的错误是:语法错误,意外的 'view' (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']);
让它更紧凑一些。