我正在使用thetispro/laravel5-setting的存储包制作laravel 5.2应用的管理设置部分。
我希望我的管理员用户能够更新发送给用户的电子邮件副本,但某些电子邮件包含用户名等变量。 "感谢您与我们一起购物,CUSTOMER NAME"。
我可以轻松地将以下内容存储在设置中,但是当刀片输出它时,它只是将其打印为字符串而不是变量。我已尝试使用{{}}和{{!!进行转义和非转义字符!}。这就是我所拥有的:
管理员用户可以编辑的电子邮件:
<h2>Hi, {{ $user->name }}</h2>
<p>Welcome to my web app</p>
在我看来,我有:
{!! Setting::get('emailuserinvite') !!}
<br /><br />
<!-- Testing both escaped and nonescaped versions -->
{{ Setting::get('emailuserinvite') }}
什么样的刀片渲染只是:
echo "<h2>Hi, {{ $user->name }}</h2>
<p>Welcome to my web app</p>";
我试图制作一个自定义刀片指令,可以关闭回声,显示变量并打开回声,但这似乎也没有正常工作。
// AppServiceProvider
Blade::directive('echobreak', function ($expression) {
// echo "my string " . $var . " close string";
$var = $expression;
return "' . $var . '";
});
// Admin user settings
Hi @echobreak($user->name)
Welcome to my web app
任何建议将不胜感激!感谢。
我使用@ abdou-tahiri的例子嘲笑了一个简单的测试用例,但我仍然在使用eval()&#39; d代码时出错。
ErrorException in SettingController.php(26) : eval()'d code line 1: Undefined variable: user
这是我的简单控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use Blade;
class SettingController extends Controller
{
public function index() {
$user = [
"fname" => "Sam",
"lname" => "yerkes"];
$str = '{{ $user }}';
return $this->bladeCompile($str, $user);
}
private function bladeCompile($value, array $args = [])
{
$generated = \Blade::compileString($value);
ob_start() and extract($args, EXTR_SKIP);
try {
eval('?>'.$generated);
}
catch (\Exception $e) {
ob_get_clean(); throw $e;
}
$content = ob_get_clean();
return $content;
}
}
答案 0 :(得分:0)
<h2>Hi, $user->name</h2>
<p>Welcome to my web app</p>
这是你想要做的吗?
<h2>Hi, {{$user->name}}</h2>
<p>Welcome to my web app</p>
答案 1 :(得分:0)
您可能需要使用Blade编译字符串,请检查此辅助函数:
function blade_compile($value, array $args = array())
{
$generated = \Blade::compileString($value);
ob_start() and extract($args, EXTR_SKIP);
// We'll include the view contents for parsing within a catcher
// so we can avoid any WSOD errors. If an exception occurs we
// will throw it out to the exception handler.
try
{
eval('?>'.$generated);
}
// If we caught an exception, we'll silently flush the output
// buffer so that no partially rendered views get thrown out
// to the client and confuse the user with junk.
catch (\Exception $e)
{
ob_get_clean(); throw $e;
}
$content = ob_get_clean();
return $content;
}
所以在你的视图文件中:
{!! blade_compile(Setting::get('emailuserinvite'),compact('user')) !!}
选中此Is there any way to compile a blade template from a string?