跳转到主要内容
dustise 提交于 24 June 2014

作者Danny Sipos

原文3 ways to prompt for user input in Drush

Drush是个能让Drupal变简单的好东西。他不仅带有大量的有用工具,同时为用户提供了接口,让用户可以轻松实现自己的命令。如果你需要为你的模块创建Drush命令,只要创建一个包含这些功能命令即可。

在这个教程中,我们会演示如何在这些命令中获取用户反馈。这里我不会提到参数或选项之类的东西。这里主要讲述的是,如何获取一个是或否的确认,或者如何提示用户进行一个选择。另外,我们也会说说如何获取用户输入的文本。

首先让我们看一下drush_module_name_example_command()这个回调函数:

/**
 * Callback function for the example command
 */
function drush_module_name_example_command() {
  // Command code we will look at
  drush_print('Hello world!');
}

确认

首先我们要试验的是如何获取用户的确认。在我们的例子中,我们会请用户确认是否显示内容,可以用Drush API这样实现:

if (drush_confirm('Are you sure you want \'Hello world\' printed to the screen?')) {
  drush_print('Hello world!');
}
else {
  drush_user_abort();
}

这里有两个新函数:drush_confirm()这个函数显示一个问题,并尝试从用户合理获取y或者n的反馈。如果回复是y,这个函数会返回true,意味着我们输出的提示获得了确认;如果回应是n,会调用drush_user_abort()。这也是推荐的中止Drush命令的方式。

选项

接下来我们来看看,如何让用户从一系列列表中进行选择。在我们的超级例子Hello World中,我们将给用户提供一系列的选择,让用户决定Drush对谁说Hello。代码实现如下:

$options = array(
 'world' => 'World',
 'univers' => 'Univers',
 'planet' => 'Planet',
);

$choice = drush_choice($options, dt('Who do you want to say hello to?'));

if ($choice) {
  drush_print(dt('Hello @choice!', array('@choice' => $options[$choice])));
}

上面的代码是做什么的呢?首先,我们创建了一个用于保存选项的$options数组。这个数组的键和值分别是选项的机器名称和描述。然后我们调用drush_choice(),两个参数分别是上面的$option和用于提示用户的问题。

当命令运行时,这个函数会返回用户选择项目的代码。接下来我们判断这个值是否存在,然后输出这个字符串。我们利用$option数组获取到用户选择内容。

用户输入内容

第三种输入是自由输入的文本。当然这类内容的输入应该进行更加严格的校验,防止恶意输入影响系统。下面我们提示用户来输入他想要问好的目标:

$value = drush_prompt(dt('Who do you want to say hello to?'));

drush_print(dt('Hello @value!', array('@value' =>  $value)));

这个例子非常简单。当命令运行时,drush_prompt()函数会在终端显示我们输入的字符串。返回值由用户输入,接下来我们会输出这个返回值。不过请注意这只是示例代码,在真正使用这一功能时,请对用户的输入进行严格的检查。

结论

这里介绍了三种不同的获取用户输入的Drush。前两种属于最常用的方式,第三种也有他的用武之地。当然——注意安全!

标签
Drupal 版本