Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问控制器中的shell方法?蛋糕PHP1.3_Php_Shell_Cakephp_View_Controller - Fatal编程技术网

访问控制器中的shell方法?蛋糕PHP1.3

访问控制器中的shell方法?蛋糕PHP1.3,php,shell,cakephp,view,controller,Php,Shell,Cakephp,View,Controller,我在CakePHP1.3中编写了一个具有返回值的shell方法 我希望能够从控制器中访问该方法,以便将其返回值传递到视图中 我不知道如何从控制器中适当地访问这些方法。我做错了吗 我可以很容易地复制代码,但我想“保持干燥”,我相信实际的功能不属于这个特定的控制器-我只需要它在这个特定视图中的返回值 编辑: 我意识到我在这里问了一个错误的问题,因为Shell本身不必返回值。我更改了代码,使Shell只使用我想要的返回值,现在我想知道-需要从Shell和控制器访问的额外类/代码的适当位置是什么 这看起

我在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和控制器访问的类/代码?