讓我們創建一個shell使用控制檯。對於這個示例,我們將創建一個簡單的Hello world殼。在您的應用程序目錄創建HelloShell.php控制檯/命令。把下面的代碼裏面:
class HelloShell extends AppShell {
public function main() {
$this->out('Hello world.');
}
}
約定殼類,類名應該匹配文件名,後綴的外殼。在我們的外殼我們創建了一個main()方法。調用此方法調用shell時,沒有額外的命令。我們將添加更多的命令,但是現在讓我們運行我們的外殼。從您的應用程序目錄,運行:
Console/cake hello
您應該看到如下輸出:Welcome to CakePHP v2.0.0 Console
---------------------------------------------------------------
App : app
Path: /Users/markstory/Sites/cake_dev/app/
---------------------------------------------------------------
Hello world.
如前所述,main()方法在貝殼是一種特殊的方法調用時沒有其他命令和參數給一個shell。您可能也注意到,HelloShell AppShell延伸。就像應用程序控制器,AppShell給你一個基類來包含所有的常見功能或邏輯。您可以定義一個AppShell,通過創建app /控制檯/命令/ AppShell.php。如果你沒有一個,CakePHP將使用內置的一個。因爲我們的主要方法並不是很有趣的讓我們添加另一個命令是:
class HelloShell extends AppShell {
public function main() {
$this->out('Hello world.');
}
public function hey_there() {
$this->out('Hey there ' . $this->args[0]);
}
}
在保存這個文件你應該能夠運行控制檯/蛋糕你好hey_there your-name打印出來,看看你的名字。任何公共方法沒有一個前綴_可以從命令行調用。在hey_there方法我們也使用$ this - >參數,該屬性包含一個數組的所有位置參數提供給一個命令。您還可以使用開關或期權shell應用程序,這些都是可以在$ this - >參數,但我們將討論這一點。
當使用一個main()方法將無法使用位置參數或參數。這是因爲第一個位置參數或選項解釋爲命令名。如果您想要使用參數和選項,您應該使用主要以外的方法名。在你的shells使用模型
你會經常需要訪問您的應用程序的業務邏輯在shell工具;CakePHP,超級簡單。通過設置使用美元財產,您可以定義一個數組的模型你想訪問您的shell。定義模型加載屬性附加到您的shell,就像一個控制器模型連接:
class UserShell extends AppShell {
public $uses = array('User');
public function show() {
$user = $this->User->findByUsername($this->args[0]);
$this->out(print_r($user, true));
}
}
上面的shell,將獲取一個用戶的用戶名和顯示的信息存儲在數據庫中。