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。前两种属于最常用的方式,第三种也有他的用武之地。当然——注意安全!

Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页

相关