让我们创建一个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,将获取一个用户的用户名和显示的信息存储在数据库中。