【问题标题】:How to execute a Shell method in a Controller?如何在 Controller 中执行 Shell 方法?
【发布时间】:2016-06-04 17:53:06
【问题描述】:

我正在使用 cakephp3 插件来管理邮件队列以发送时事通讯(Lorenzo Cakephp 电子邮件队列)。它工作正常,但我需要使用带有 bake 命令的 Shell 方法来发送时事通讯。 cron 作业不是问题,但我希望能够在不等待 cron 作业的情况下发送测试邮件。 我尝试使用 php exec 命令调用 bake 命令,但它不起作用(也许是一个正确的问题?)但我无权访问服务器来管理权限。但是,由于方法和控制器都在 cakephp 中,我认为用控制台(外部)烘焙调用来做这件事很奇怪......

有没有办法从控制器调用 Shell 方法,这将是“最干净”和最简单的方法?

感谢大家的帮助!

【问题讨论】:

    标签: cakephp cakephp-3.x


    【解决方案1】:

    这将是“最干净”和最简单的方法?

    外壳应被视为类似于控制器 - 控制器不调用控制器。

    考虑将the cli logic 放在一个公共位置,并让 cli 和控制器操作调用它,而不是相互调用。相关的cli代码是几行代码,但实际上并没有做任何复杂的事情,只是在要发送的邮件上循环,然后一一发送。

    我需要使用带有 bake 命令的 Shell 方法来发送时事通讯

    注意bake一个 cli,它不是“the” cli,并且不构成runtime usage of that plugin 的一部分。

    bin/cake EmailQueue.sender -h
    

    它目前可能无法正常工作,因为您使用了错误的 cli 命令来尝试从控制器操作中运行它 - 尽管无论如何这样做都不是一个好主意/设计。

    【讨论】:

    • 感谢 AD7six。确实,我说的是“烘焙”,但我指的是“蛋糕”。最后,我成功地使用 php 'exec' 命令启动了 EmailQueue.sender : exec("/bin/bash ".Configure::read('App.paths.websiteRootPath')."/cms/bin/cake EmailQueue.发件人", $result);
    • though it's not a very good idea/design to do it that way anyway
    • 这就是插件的制作方式...为了不自己开发,我拿了一个插件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2015-09-26
    相关资源
    最近更新 更多