Yii2:避免InputWidget id冲突的策略

时间:2017-12-06 06:53:05

标签: php html yii yii2 yii2-widget

在Yii2中呈现InputWidget时,id选项会根据内部静态窗口小部件实例计数器自动生成HTML标记。默认情况下,id看起来像w0w1w2,...取决于实例化的窗口小部件数量。这在立即渲染整个页面时效果很好。

但是在引入部分渲染(例如AJAX)时很快就会出现问题,因为每个顺序页面渲染都将从0的小部件计数器开始,所以如果我们将这些小部件注入已经渲染的页面,我们最终会出现id冲突(例如,我们可能有两个具有相同ID w0的小部件)。这打破了HTML标准,导致JavaScript问题和其他麻烦。

那么有什么可能呢?

  • 最明显的方法当然是手动将id设置为硬编码字符串。但现在我们需要知道窗口小部件的呈现次数,我们需要添加大量if语句来确定要呈现的ID。它有效,但它非常hacky。
  • 使用其父容器的id自动添加或附加窗口小部件id。这在理论上听起来不错,但到目前为止我还没有意识到这一点。
  • 修改Yii2 InputWidget以使用UUID(通用唯一标识符)而不是计数器。这听起来很有希望,但它需要一个核心框架补丁(否则它不适用于第三方小部件)并且无法预测ID(例如在测试时)。

对此最常用的通用解决方案是什么?

0 个答案:

没有答案