Lithium:如何通过命令行访问操作?

时间:2013-02-05 23:53:31

标签: command-line lithium

我正在尝试通过CLI运行操作。行动是UsersController::test()

所以,我运行这个: php libraries/lithium/console/lithium.php \\app\\controllers\\UsersController test

但我一直遇到这个错误: PHP Fatal error: Call to undefined method lithium\console\Request::get() in /var/www/example.com/libraries/lithium/action/Controller.php on line 154

我做错了什么?

1 个答案:

答案 0 :(得分:4)

请参阅http://li3.me/docs/lithium/console以供参考。

据我所知,不可能直接从命令行调用控制器。虽然从你的错误来看,它似乎正在尝试做点什么。

相反,请创建一个从\lithium\console\Command延伸的类,并将其放在namespace app\extensions\command中。例如,将该类命名为Users。在该类中,创建一个名为test()的方法,该方法将在您通过cli调用命令时运行。

现在当你运行li3(或lithium.php)时,它应该打印所有可用的命令,你应该在列表中看到你的命令。如果您已将li3 users test添加到bin路径,则可以调用lithium/console/li3并运行它。或者你可以致电php -f path/to/lithium.php -- users test,它应该做同样的事情。如果您遗漏了test,它会在app\extensions\console\Users类中查找名为run()的方法并调用它。

您可能会创建控制器的实例并调用test()方法,但正如您所看到的,从Web浏览器运行时可用的Request类与从命令行运行时的Request类不同。在控制器方法中获取业务逻辑并将其移动到另一个类,然后将请求参数从控制器传递到该方法可能会更好。然后从控制台命令类中,您可以类似地调用相同的集中式方法。