Blade,解析字符串中的变量

时间:2014-05-17 04:50:47

标签: laravel-4 blade

我想实现这样的目标:

$data['username'] = "John";
$data['msg'] = "Hey {{$username}}, blab blab blab";
View::make('view.name')->with($data);

// Blade

{{ $msg }}

// Prints
Hey John, blab blab blab

关于如何去做的任何想法?

修改 我正在尝试实现像邮件系统这样的“mailchimp”,其中用户(这只是管理员方面,到目前为止管理员只是我,所以我可以忽略这里的几个安全检查)可以添加变量(我知道将在查看范围)到邮件正文。我使用它来获得支持,例如我可能想要发送一个链接到用户的个人资料:

Hey {{first_name}},

This is a link to your profile: <a href="/users/{{user_guid}}">profile</a>

这意味着消息体中可能存在变量,也可能不存在变量。

编辑: 我得到的结束是(这可能有助于理解我想要做的):

// These variable are not hard coded here, I just had them to indicate that they will be in view scope
$data['username'] = "John";
$data['msg'] = "Hey {{$username}}, blab blab blab";

// I can only know for sure that 'msg' will be defined and that it may or may not contain over variables
$data['msg'] = Blade::compileString($data['msg']);
View::make('view.name')->with($data);

// Blade

{{ $msg }}

// Prints
Hey John, blab blab blab

2 个答案:

答案 0 :(得分:1)

$data['username'] = "John";
$data['msg'] = "Hey " . $data['username'] . ", blab blab blab";
View::make('view.name')->with($data);

// Blade

{{ $msg }}

// Prints
Hey John, blab blab blab

但是如果用户名是由用户定义的,而不是硬编码 - 那么你应该在刀片中打印它以防止XSS错误

{{{ $msg }}}

编辑:

你可以这样做吗?

$data['msg'] = "Hey %s, blab blab blab";
{{{ sprintf($msg, $username) }}}

答案 1 :(得分:1)

您可以使用View :: make来执行此操作:

$string = View::make("view.name", array("username" => "user", "msg" => "blah blah"));

稍后你可以这样做:

$parsedView = $string->render();

像魅力一样! :)