[英]Access shell methods in controller? Cake PHP 1.3
我在CakePHP 1.3中編寫了一個返回值的shell方法。
我希望能夠從控制器中訪問該方法,以便我可以將其返回值傳遞給View。
我不確定如何從控制器內適當地訪問這些方法。 我做錯了嗎?
我可以很容易地復制代碼,但我想“保持干燥”,我相信實際的功能不屬於這個特定的控制器 - 我只需要它在這個特定視圖中的返回值。
編輯:
我意識到我在這里提出了一個錯誤的問題,因為Shell本身不一定會返回一個值。 我已經更改了代碼,以便Shell只使用我想要的返回值,現在我想知道 - 需要從Shell 和 Controller訪問的額外類/代碼的適當位置是什么?
它看起來像組件代碼,但我不確定如何從Shell訪問組件。 它不是插件,因為我理解它們。 這是怎么回事?
在我們導入shell任務的其中一個項目中,ex:
App::import('Core', 'Shell');
App::Import('Vendor','shells/tasks/sometask');
$returndata = TasknameTask::execute($somevalue);
您可以創建一個組件來完成它.Eg
/* 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();
....
}
接受的答案似乎不適用於Cake 2.0
對於Cake 2.0
if (!class_exists('Shell')) {
require CONSOLE_LIBS . 'shell.php';
}
App::import('Shell', 'DoSomething');
DoSomethingShell::main();
請記住,某些Shell方法在此模式下不起作用,例如$ this-> out,因此需要更多的黑客攻擊。
shell不應該直接返回值,它們應該以某種方式報告它,例如通過將其回顯到stdout,記錄到文件或發送電子郵件等。 我喜歡將shell視為cli的控制器。
在不知道你的應用程序的情況下,我的建議是看看你是否可以將當前shell中的邏輯重構為模型類或類似的東西,讓模型方法返回值,然后在shell中使用該模型。 這樣,您也可以在控制器中使用該模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.