Javascript 变量到 Twig

Javascript variable to Twig

我需要创建一个散列并将其放入 html 输入的占位符中。我需要占位符中 makehash() 函数的散列。我已尝试使用以下代码段实现此目的,但未获得所需的结果。

placeholder: "string";

{% block javascript %}
    <script>
        function makehash() {
          var hash = "";
          var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

          for (var i = 0; i < 5; i++)
            hash += possible.charAt(Math.floor(Math.random() * possible.length));

          return hash;
        }
    </script>
{% endblock %}

{% set attributes = {
    guuid: {
        class:           option.class,
        data_errortext:  option.errortext,
        id:              key,
        maxlength:       225,
        name:            name,
        pattern:         (option.pattern and option.pattern not in ['url', 'email']) ? option.pattern : '',
        placeholder:     hash should come here,
        readonly:        option.readonly,
        required:        option.required,
        title:           option.title,
        type:            (option.pattern in ['url', 'email']) ? option.pattern : 'text',
        value:           context.content.get(contentkey)|default(''),
    }
} %}

不可能。

Javascript是客户端,而twig是服务器端。
如果你想做这样的事情,那么在你的实体中添加这个函数,在你的控制器中调用它,并将结果发送到你的树枝视图。

你不能为所欲为。

您的网站呈现如下:

  1. 客户端请求页面
  2. 服务器收到请求并将其发送到php
  3. php 启动 symfony
  4. symfony 启动了 twig
  5. twig returns 内容到 symfony
  6. symfony returns 内容 php
  7. php 将内容提供给网络服务器
  8. 网络服务器将内容提供给客户端
  9. 客户端浏览器解释 html
  10. 客户端浏览器执行javascript

第4步和第10步之间的距离被计算机(服务器计算机和客户端计算机)隔开。他们根本不了解对方。

对于 twig,javascript 代码只是文本。
对于 javascript,树枝代码不存在。仅呈现 html.

现在,如果您想使用 GUID,我建议您使用类似 https://github.com/webpatser/laravel-uuid