ccuffs/poll-from-text

一个方便的软件包,可以从纯文本(最少组织成行)创建投票(问卷调查)。

2.0.0 2021-10-03 22:27 UTC

This package is auto-updated.

Last update: 2024-09-29 01:51:34 UTC


README


简介

poll-from-text 是一个 PHP 软件包,用于将半结构化文本解析成结构化数据,以便用于构建问卷调查(表单)。主要目标是允许最终用户使用纯文本构建动态表单,例如 Google 表单,就像这些表单要打印在纸上一样。

注意:此软件包假设“纯”文本具有某种格式,因此可能不是尽可能通用的。世界上有更大的问题。

✨特性

  • 简单输入问题(用于创建 <input type="text" /> 元素);
  • 带选项的问题(用于创建 <select> 元素);
  • 无值的选项(只有文本),例如 - 文本,或 * 文本(如 <option>Text</option>);
  • 带值的选项,例如 a) 文本(值是 "a",如 <option value="a">Text</option>);
  • 问题和选项的数据属性(作为 JSON 对象),例如 {"type":"file"} 什么?(用于创建自定义表单元素,例如 <input type="file" />)。

🚀 开始使用

1. 将此软件包添加到您的项目

在您的项目根目录下运行

composer require ccuffs/poll-from-text

2. 基本用法

实例化类 CCUFFS\Text\PollFromText 然后调用 parse()

提示:如果您不想实例化对象,请使用 CCUFFS\Text\PollFromText::make()

$poller = new CCUFFS\Text\PollFromText();
$questions = $poller->parse('Favorite color?')

var_dump($questions);

输出应类似于

array(1) {
  [0]=>
  array(2) {
    ["text"]=>
    string(15) "Favorite color?"
    ["type"]=>
    string(5) "input"
  }
}

新行(不带选项标记)表示新的问题

$poller = new CCUFFS\Text\PollFromText();
$questions = $poller->parse('
    Favorite color?
    Favorite food?
')

var_dump($questions);

输出应类似于

array(2) {
  [0]=>
  array(2) {
    ["text"]=>
    string(15) "Favorite color?"
    ["type"]=>
    string(5) "input"
  }
  [1]=>
  array(2) {
    ["text"]=>
    string(15) "Favorite food?"
    ["type"]=>
    string(5) "input"
  }  
}

您可以通过在行前添加 -* 来创建带选项的问题

$poller = new CCUFFS\Text\PollFromText();
$questions = $poller->parse('
   Choose favorite color
   - Green
');

var_dump($questions);

输出应类似于

array(1) {
  [0]=>
  array(3) {
    ["text"]=>
    string(21) "Choose favorite color"
    ["type"]=>
    string(6) "select"
    ["options"]=>
    array(1) {
      ["text"]=>
      string(5) "Green",
      ["marker"]=>
      string(1) "-"
    }
  }
}

3. 高级用法

您可以使用 ) 创建带值的问题和选项,例如

$poller = new CCUFFS\Text\PollFromText();
$questions = $poller->parse('
   Choose favorite color
   a) Green
');

var_dump($questions);

输出应类似于

array(1) {
  [0]=>
  array(3) {
    ["text"]=>
    string(21) "Choose favorite color"
    ["type"]=>
    string(6) "select"
    ["options"]=>
    array(1) {
     ["a"]=>
      array(3) {
        ["text"]=>
        string(5) "Green"
        ["marker"]=>
        string(1) "a"
        ["separator"]=>
        string(1) ")"
    }
  }
}

问题和选项都接受一个 JSON 字符串作为数据字段,例如

$poller = new CCUFFS\Text\PollFromText();
$questions = $poller->parse('{"attr":"value", "attr2":"value"} Type favorite color');

var_dump($questions);

输出应类似于

array(1) {
  [0]=>
  array(3) {
    ["text"]=>
    string(21) "Type favorite color"
    ["type"]=>
    string(5) "input"
    ["data"]=>
    array(2) {
      ["attr"]=>
      string(5) "value"
      ["attr2"]=>
      string(5) "value"
    }
  }
}

选项的数据属性

$poller = new CCUFFS\Text\PollFromText();
$questions = $poller->parse('
   Choose favorite color
   {"attr":"hi"} a) Green
');

var_dump($questions);

输出应类似于

array(1) {
  [0]=>
  array(3) {
    ["text"]=>
    string(21) "Choose favorite color"
    ["type"]=>
    string(6) "select"
    ["options"]=>
    array(1) {
      ["a"]=> array(2) {
          ["text"]=>
          string(5) "Green"
          ["marker"]=>
          string(1) "a"
          ["separator"]=>
          string(1) ")"          
          ["data"]=>
          array(1) {
              ["attr"]=>
              string(2) "hi"
          }
      }
    }
  }
}

3.1 特定配置

两者 parse()make() 都接受一个 $config,它是一个数组,包含在生成问卷时要考虑的配置。以下是所有可用配置选项的完整列表

$config = [
    'multiline_question' => false,                   // if `true`, questions are allowed to have `\n` in their text.
    'attr_validation' => PollFromText::ATTR_AS_TEXT, // allow any text a attribute (no validation)
];

4. 测试(与软件包开发相关)

如果您计划更改软件包的工作方式,请首先克隆它

git clone https://github.com/ccuffs/poll-from-text && cd poll-from-text

安装依赖项

composer install

进行更改。然后运行测试以确保没有出错

./vendor/bin/pest

应该有大量的绿色标记 😁

🤝 贡献

无论形式如何,您的帮助都非常受欢迎!请查看 CONTRIBUTING.md 文件以获取所有您可以贡献项目的途径。例如,建议新功能报告问题/错误提交拉取请求,或简单地使用项目并评论您的体验。我们鼓励您尽可能多地参与,但在与其他社区成员互动之前,请务必遵守 行为准则

查看 ROADMAP.md 文件,了解项目应如何发展。

🎫 许可证

本项目采用MIT开源许可证授权,并可免费使用。

🧬 更新日志

查看本项目所有变更记录,请参阅CHANGELOG.md文件。

🧪 相关项目

以下是一份有趣的链接和相关项目的列表