Php 刀片视图模板中使用的所有变量的请求列表
我们有一系列的blade view模板,这些模板都是即将发布的电子邮件,我们希望为我们的内部管理部门创建一种简单的方式来预览这些电子邮件,而不实际发送它们 我可以保留一系列的变量,并提供填充变量,但我很好奇是否有办法请求视图中使用的变量列表 例如,我有一个基本视图“greeting.blade.php”,上面写着:Php 刀片视图模板中使用的所有变量的请求列表,php,laravel,laravel-blade,Php,Laravel,Laravel Blade,我们有一系列的blade view模板,这些模板都是即将发布的电子邮件,我们希望为我们的内部管理部门创建一种简单的方式来预览这些电子邮件,而不实际发送它们 我可以保留一系列的变量,并提供填充变量,但我很好奇是否有办法请求视图中使用的变量列表 例如,我有一个基本视图“greeting.blade.php”,上面写着: Dear {{$customerFirstName}} {{$customerLastName}}, 我想: $usedVariablesArray = getVariablesF
Dear {{$customerFirstName}} {{$customerLastName}},
我想:
$usedVariablesArray = getVariablesFromView("greeting");
并让它返回:
['customerFirstName', 'customerLastName']
laravel中有没有内置的东西可以提供这种功能
[编辑]
我想从有问题的视图文件之外执行此操作
public function previewEmailTemplate($templateName) {
$usedVariables = $getArrayOfVariables($template);
// Would return ['customerFirstName', 'customerLastName']
foreach($usedVariables as $aUsedVariable) {
$dummyValues[$aUsedVariable] = $aUsedVariable;
}
return view($template, $dummyValues)->render();
}
因此,这个函数将用变量名代替变量来呈现模板
这让我的问题更清楚了吗?我也需要这样的功能,但在网上找不到 我写了一个简单的函数来实现它 我可以帮你吗
greeting.blade.php
Dear {{$customerFirstName}} {{$customerLastName}},
functions.php
Dear {{$customerFirstName}} {{$customerLastName}},
函数getVariablesFromView($templatePath)
{
//$templatePath='/resources/views/mail/greeting.blade.php'
$contents=file\u get\u contents($templatePath);
$re='/{{[\]*\$[a-zA-Z]+[\]*}}/m';
preg_match_all($re,$contents,$matches,preg_SET_ORDER,0);
$narray=[];
数组_walk_recursive($matches,function($a)use(&$adveltnarray){$adveltnarray[]=$a;});
$variables=str_replace(['{','}}','$','''],'''.$narray);
返回$variables;
//['customerFirstName','customerLastName']
}
p、 美国。
此函数不支持高级刀片语法,如
@extend('xxx')
谢谢您对这个问题的第一个答案董承樺, 我的回答只是对您所写内容的扩展,以涵盖更多的用例。如果您愿意,请随时使用此改进的代码更新您的答案
具体来说,此版本支持包含下划线的php变量名,如$very_good_variable等。它还支持“unescaped”Laravel Blade语法,即{!!$something_something!!}而不是{{$something_something}。正则表达式不是我的强项,我相信有办法让它与更简洁的代码一起工作,但它似乎确实有效
function getVariablesFromView(($templatePath){
//this version tests for standard blade variables... of the form {{ $something_something }}
$re = '/{{[\ ]*\$[a-zA-Z_]+[\ ]*}}/m';
preg_match_all($re, $contents, $matches, PREG_SET_ORDER, 0);
$flatternArray = [];
array_walk_recursive($matches, function ($a) use (&$flatternArray) {$flatternArray[] = $a;});
$regular_variables = str_replace(['{{', '}}', '$', ' '], '', $flatternArray);
//this version tests for unescaped blade variables... of the form {!! $something_something !!}
$re = '/{!![\ ]*\$[a-zA-Z_]+[\ ]*!!}/m';
preg_match_all($re, $contents, $matches, PREG_SET_ORDER, 0);
$flatternArray = [];
array_walk_recursive($matches, function ($a) use (&$flatternArray) {$flatternArray[] = $a;});
$unescaped_variables = str_replace(['{!!', '!!}', '$', ' '], '', $flatternArray);
$variables = array_merge($regular_variables,$unescaped_variables);
return $variables;
}
这一个的可能重复:你如何分配你想要得到的两个变量?去你的控制器,看看哪些变量通过了@ad_on_的可能重复项。你可能是对的,我现在将研究对这个问题的回答。Leo_Kelmendi:将模板名和变量数组传递给Mail::send()。克丽丝:啊!但是,我必须对系统中添加的每个新电子邮件模板执行此操作,并将该列表存储在某个位置。而不是在电子邮件更改时更新它。我更喜欢简单地编写一个函数,返回上述变量。很像ad_on_的潜在反应是什么。