我想在Twig中生成随机的十六进制颜色,例如将其用作背景,如下所示:
1
2
3
8
9
10
11
12
4
5
6
7
17
18
19
有什么办法吗?
答案 0 :(得分:1)
我建议你随机化一组已知数据(为了排除没有意义值),如下所示:
{% for organization in organizations %}
{
value: {{ organization.value }},
color: "{{ random(['#H54924', '#F36252', '#F56954']) }}"
label: "{{ organization.name }}"
},
{% endfor %}
编辑:
对于纯随机值,您可以尝试以下方法:
{% set values = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']%}
{% for organization in organizations %}
{
value: {{ organization.value }},
color: "#{{random(values)~ random(values)~ random(values)~ random(values)~ random(values)~ random(values) }}",
label: "{{ organization.name }}"
},
{% endfor %}
{{ '#' ~ random(values) ~ random(values) ~ random(values) ~ random(values) ~ random(values) ~ random(values) }}
Here一个工作示例
希望这个帮助
答案 1 :(得分:0)
class SomeUtil
{
/**
* @return string hex color string (RGB): #XXXXXX
*/
public static function randHexColor()
{
return sprintf("#%06s", dechex(rand(0, 256**3-1)));
}
/**
* @param int $rangeFrom [0..255]
* @param int $rangeTo [0..255]
* @return string hex color string (RGB): #XXXXXX
*/
public static function rangedRandHexColor($rangeFrom = null, $rangeTo = null)
{
$min = 0;
$max = 255;
if ($rangeFrom === null || !NumberUtil::inRange($rangeFrom, $min, $max)) {
$rangeFrom = $min;
}
if ($rangeTo === null || !NumberUtil::inRange($rangeTo, $min, $max)) {
$rangeTo = $max;
}
if ($rangeFrom === $min && $rangeTo === $max) {
return self::randHexColor();
} else {
return sprintf("#%02s", dechex(rand($rangeFrom, $rangeTo)))
.sprintf("%02s", dechex(rand($rangeFrom, $rangeTo)))
.sprintf("%02s", dechex(rand($rangeFrom, $rangeTo)));
}
}
}
在控制器中
$data['util'] = new SomeUtil();
return $this->renderView('AppBundle:Foo:bar.html.twig', $data);
在树枝上
{{ util.randHexColor() }}
或
{{ util.rangedRandHexColor(180, 220) }}
排除深色和LSD颜色