2

我正在尝试通过 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

我究竟做错了什么?

4

1 回答 1

5

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

据我所知,直接从命令行调用控制器是不可能的。尽管从您的错误来看,它似乎正在尝试做某事。

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

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

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

于 2013-02-06T02:58:10.423 回答