ブレードサービスコンテナを使用して、マーカーが含まれている文字列を取得してコンパイルし、ブレードテンプレートに追加して、さらに補間できるようにします。
したがって、次のデータベースから取得したサーバーに電子メール文字列(簡潔にするために省略)があります。
<p>Welcome {{ $first_name }},</p>
そして、私はそれをに補間したい
<p>Welcome Joe,</p>
したがって、Bladeテンプレートに$ contentとして送信し、Bladeが2回補間しないため、すべてのコンテンツとマークアップをレンダリングすることができます。現在、テンプレートはクライアントで作成され、データベースに保存されています。
Blade::compileString(value)
を生成しますが<p>Welcome <?php echo e($first_name); ?>,</p>
、BladeAPIをJoe
使用して文字列で$ first_nameを解決する方法を理解できず、後でBladeテンプレート内でそれを実行しません。次のようなPHP区切り文字を含む文字列として電子メールに表示するだけです。
<p>Welcome <?php echo e($first_name); ?>,</p>
助言がありますか?
これはそれを行う必要があります:
// CustomBladeCompiler.php
use Symfony\Component\Debug\Exception\FatalThrowableError;
class CustomBladeCompiler
{
public static function render($string, $data)
{
$php = Blade::compileString($string);
$obLevel = ob_get_level();
ob_start();
extract($data, EXTR_SKIP);
try {
eval('?' . '>' . $php);
} catch (Exception $e) {
while (ob_get_level() > $obLevel) ob_end_clean();
throw $e;
} catch (Throwable $e) {
while (ob_get_level() > $obLevel) ob_end_clean();
throw new FatalThrowableError($e);
}
return ob_get_clean();
}
}
使用法:
$first_name = 'Joe';
$dbString = '<p>Welcome {{ $first_name }},</p>';
return CustomBladeCompiler::render($dbString, ['first_name' => $first_name]);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加