我正在尝试通过 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
我做错了什么?
最佳答案
参见http://li3.me/docs/lithium/console供引用。
据我所知,不可能直接从命令行调用 Controller 。尽管从您的错误来看,它似乎正在尝试做某事。
相反,创建一个从 \lithium\console\Command
扩展的类,并将其放置在 命名空间 app\extensions\command
中。例如,将该类命名为 Users
。在该类中,创建一个名为 test()
的方法,该方法将在您通过 cli 调用命令时运行。
现在,当您运行 li3(或lithium.php)时,它应该打印所有可用的命令,并且您应该在列表中看到您的命令。您将调用 li3 users test
,如果您已将 lithium/console/li3
添加到 bin 路径,则应该运行它。或者你可以调用 php -f path/to/lithium.php -- users test 应该做同样的事情。如果您遗漏了 test
,它将在您的 app\extensions\console\Users
类中查找名为 run() 的方法并调用该方法。
您可能会创建 Controller 的实例并调用 test() 方法,但正如您所见,从 Web 浏览器运行时可用的 Request 类与从命令行运行时可用的 Request 类不同。最好将 Controller 方法中的业务逻辑移至另一个类,然后将请求参数从 Controller 传递到该方法。然后,您可以从控制台命令类中类似地调用相同的集中方法。
关于command-line - Lithium:如何通过命令行访问操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14719158/