PHP YAML 解析器是 documented,用于解析配置文件的 YAML 子集。
它只支持处理配置文件所需的功能。
更难解决的事情是处理多行标量字符串,文档甚至指出实现多行引用消息更简单(即标量字符串)不受支持。
Codebeautify,自称是最好的在线 YAML 验证器,也无法处理这个正确的 YAML 文档,同样的错误,所以他们似乎也在使用有缺陷的 PHP YAML 解析器。
如果你被PHP卡住了,那么你可以做三件事,更易读的是使用literal style scalars,如下所示(注意序列元素指示符-之后的|):
sudo: false
language: php
php:
- 5.6
- 7.0
- 7.1
- hhvm
matrix:
allow_failures:
- php: 7.1
before_script:
- composer install --no-suggest ;
script:
- |
if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then
vendor/bin/phpunit --coverage-clover clover.xml ;
vendor/bin/phpcs ;
else
vendor/bin/phpunit ;
fi
after_script:
- |
if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then
vendor/bin/coveralls --coverage_clover=clover.xml -v ;
fi
然而,这会改变字符串,因为换行符被保留。
与folded style scalar string 类似,如果不是缩进的行,它会在 YAML 加载时删除换行符。因此,如果上述方法不起作用,您可以这样做:
sudo: false
language: php
php:
- 5.6
- 7.0
- 7.1
- hhvm
matrix:
allow_failures:
- php: 7.1
before_script:
- composer install --no-suggest ;
script:
- >-
if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then
vendor/bin/phpunit --coverage-clover clover.xml ;
vendor/bin/phpcs ;
else
vendor/bin/phpunit ;
fi
after_script:
- >-
if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then
vendor/bin/coveralls --coverage_clover=clover.xml -v ;
fi
最后的选择是将标量字符串重写为一行:
sudo: false
language: php
php:
- 5.6
- 7.0
- 7.1
- hhvm
matrix:
allow_failures:
- php: 7.1
before_script:
- composer install --no-suggest ;
script:
- if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then vendor/bin/phpunit --coverage-clover clover.xml ; vendor/bin/phpcs ; else vendor/bin/phpunit ; fi
after_script:
- if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then vendor/bin/coveralls --coverage_clover=clover.xml -v ; fi
最后一个版本和折叠样式通过比 PHP 使用的更完整的 YAML 解析器加载与您的 YAML 源代码完全相同的内容。文字样式会加载不同的内容,但如果您的应用程序以相同的方式处理这些标量字符串中的换行符和空格,这可能仍然有效。