我正在构建一个模板系统,它使用预定义的字段(命名为字段1 - 10)和相应的表单来切换这些字段与用户表单数据。我一直在使用preg_replace和str_replace,但不确定如何正确实现这个功能,因为我以前从未使用过它。
本质上,系统的工作原理是首先上传一个“模板”,它是一个HTML字符串,格式如下
'<div><h1>{field1}</h1><h2>{field1}</h2></div>'
在一个单独的函数中,我想用通过用户表单提交的字符串替换'{field 1}'和'{field 2}'值。
到目前为止,我正在提取数据,如下所示:
对于模板:
$html = Templates::where('id', '=', $templateId)->get('html');
对于表单数据:
$field1 = $request->input('field_1');
$field2 = $request->input('field_2');
然后我想做一些类似下面的代码,但我不确定的语法。由于我以前没有使用过preg_replace,所以我将从1到10的每个字段作为单独的函数手动编写。
理想情况下,我希望能够循环遍历每个字段,从1到10,检查它们是否在$html中显示为'{field#}',如果该字段存在于模板中,则替换为表单数据,如果不是,则忽略它。以保存为每个单独的字段重新编写代码。
当前更换尝试:
$htmlPrep = preg_replace('{field1}', $field1, $html);
$htmlPrep = preg_replace('{field2}', $field2, $html);
在函数中替换字符串的这些区域,而不是在视图中渲染它们的原因是,fields 1 -10和生成系统首先需要为多个模板工作,这些模板将具有限制为最多10个的任何数量的字段,其次,包含组合数据结果的$htmlPrep变量将不会被渲染,而是发送到带有一些CSS的API,以便生成并返回图像。
因此,预期结果(使用'a'和'B'作为用户输入表单值)将是一个名为$htmlPrep的新变量,其中包含:
'<div><h1>a</h1><h2>b</h2></div>'.
2条答案
按热度按时间xpcnnkqh1#
当然你可以用途:
而不是:
yebdmbv42#
我是一个傻瓜,忽略了代码逻辑中一个相当简单的错误。
所以我试图把所有的值都插入到一个字符串中。但是每次我为一个变量运行字符串替换时,我都使用原始的html模板'$html'而不是更新的'$htmlPrep',因为我已经编写了一行替换代码field 3,并且在我的测试模板中没有field 3,它会将原始的$html查找'{field 3}'找不到它,然后将没有替换的原始字符串返回到我的新变量中。
总之
这一点:
应该是这样的