我正在尝试通过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
我做错了什么?
答案 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类不同。在控制器方法中获取业务逻辑并将其移动到另一个类,然后将请求参数从控制器传递到该方法可能会更好。然后从控制台命令类中,您可以类似地调用相同的集中式方法。