簡體   English   中英

在控制器中訪問shell方法?蛋糕PHP 1.3

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM