如何使用Twig生成随机字符串?

时间:2015-10-02 15:52:34

标签: php twig

我有一个输入来保存优惠券的代码。用户可以填写自定义代码,但我想给他们一个默认代码。我现在有以下代码:

<input type="text" name="code" value="{{ form.code|default(RANDOM_CODE) }}">

我希望用随机字符串替换RANDOM_CODE

我认为这与问题无关,但form.code包含原始优惠券代码。我使用相同的表格进行编辑。

根据Twig文档,可以使用random()生成随机数,甚至可以使用random('abcdefgh...')从字符串中获取随机数,但是我想生成一个随机字符串具体长度。

我知道我可以使用至少两种方法来做到这一点:

  1. 在控制器中生成默认随机代码,然后将其传递给视图;或
  2. 使用函数创建一个Twig扩展,为我生成随机字符串。
  3. 知道我很好奇是否有办法只使用Twig的内置函数生成随机字符串。

3 个答案:

答案 0 :(得分:9)

此代码将在base64中生成一个10个字符的密码(A到Z为大写,0到9,短划线和下划线)。这也使它对网友好。如果您愿意,可以根据自己的喜好更改参数。

{% set randomPassword = [] %}
{% set alpha = 'abcdefghijklmnopqrstuvwxyz' %}
{% set numbers = '0123456789' %}

{% for i in 1..10 %}
    {% set randomCharacter = random(alpha ~ alpha|upper ~ numbers ~ '-_') %}
    {% set randomPassword = randomPassword|merge([randomCharacter]) %}
{% endfor %}
{% set randomPassword = randomPassword|join %}


{{ randomPassword }}

答案 1 :(得分:1)

同意@Fluffy你不应该在树枝上做:你的优惠券代码是一个数据,将在php中处理,它必须在php中生成。

但是我有一个用例直接在模板中生成一个唯一的ID:当只涉及模板时。

我收到了一份有输入的表格。我的输入需要一个id,但只能从同一个模板中引用它们,在&#34; for&#34;标签的属性。

因为它是在循环中生成的,所以我提出了一个简单的:

class A
{
public:
        A() : a(1) {}
        A(const A& op):
             const_field1(op.const_field1),..., a(op.a) // all const fields here
           { init() };
        A(const A& op, int a_):
             const_field1(op.const_field1),..., a(a))   // dup line at editor level

private:
        void init(void) {
            // init non const fields here
        }
        // ... Lots of constant and non-constant member data ...
        const int a;
};

答案 2 :(得分:0)

树枝原生:

{{ random() }}

访问以下链接以获取树枝文档。 [检查这个]:https://twig.symfony.com/doc/3.x/functions/random.html