访问控制器中的shell方法?蛋糕PHP1.3
我在CakePHP1.3中编写了一个具有返回值的shell方法 我希望能够从控制器中访问该方法,以便将其返回值传递到视图中 我不知道如何从控制器中适当地访问这些方法。我做错了吗 我可以很容易地复制代码,但我想“保持干燥”,我相信实际的功能不属于这个特定的控制器-我只需要它在这个特定视图中的返回值 编辑: 我意识到我在这里问了一个错误的问题,因为Shell本身不必返回值。我更改了代码,使Shell只使用我想要的返回值,现在我想知道-需要从Shell和控制器访问的额外类/代码的适当位置是什么访问控制器中的shell方法?蛋糕PHP1.3,php,shell,cakephp,view,controller,Php,Shell,Cakephp,View,Controller,我在CakePHP1.3中编写了一个具有返回值的shell方法 我希望能够从控制器中访问该方法,以便将其返回值传递到视图中 我不知道如何从控制器中适当地访问这些方法。我做错了吗 我可以很容易地复制代码,但我想“保持干燥”,我相信实际的功能不属于这个特定的控制器-我只需要它在这个特定视图中的返回值 编辑: 我意识到我在这里问了一个错误的问题,因为Shell本身不必返回值。我更改了代码,使Shell只使用我想要的返回值,现在我想知道-需要从Shell和控制器访问的额外类/代码的适当位置是什么 这看起
这看起来像是组件代码,但我不确定如何从Shell访问组件。据我所知,这不是一个插件。这个去哪儿了 shell不应该直接显式返回值,它们应该以某种方式报告该值,例如通过将其回显到stdout、记录到文件或发送电子邮件。我喜欢将shell看作cli的控制器 在不了解应用程序的情况下,我的建议是看看是否可以将当前shell中的逻辑重构为模型类或类似的东西,让model方法返回值,然后在shell中使用该模型。这样,您也可以在控制器中使用该模型
/* in app/controllers/components */
class ShellComponent extends Object
{
function do_shell()
{
return shell_exec('some command');
}
}
然后在您想要的任何控制器中使用它,如下所示
/* in some controller*/
var $components = array('Shell','maybe some other components',....);
function testShell()
{
$result = $this->Shell->do_shell();
....
}
在其中一个项目中,我们导入了shell任务,例如:
应用程序::导入('Core','Shell')
应用程序::导入('Vendor','shell/tasks/sometask')
$returndata=TasknameTask::execute($somevalue)
公认的答案似乎对Cake 2.0不起作用
if (!class_exists('Shell')) {
require CONSOLE_LIBS . 'shell.php';
}
App::import('Shell', 'DoSomething');
DoSomethingShell::main();
蛋糕2.0
if (!class_exists('Shell')) {
require CONSOLE_LIBS . 'shell.php';
}
App::import('Shell', 'DoSomething');
DoSomethingShell::main();
请记住,某些Shell方法在此模式下不起作用,例如$this->out,因此需要进行更多的黑客攻击。因为我喜欢将代码与模型分离的想法,正如我所提到的-这没有直接关系-组件是一个好主意。但是我可以从Shell访问组件吗?嗯,我认为这不是一个好主意。组件是用于cake中的控制器,而不是操作系统中的Shell。:)这种方法适合cakephp 2吗?Thanks@tranteShell只使用从重要消息返回的信息来显示它,所以我猜从技术上讲,它不是我需要访问的Shell。是否有合适的位置放置需要从Shell和控制器访问的类/代码?