Laravel 中如何從字串編譯 Blade 模板?

Patricia Arquette
發布: 2024-10-22 12:03:02
原創
124 人瀏覽過

How Can Blade Templates Be Compiled from Strings in Laravel?

Compiling Blade Templates from Strings

In Laravel, a popular web application framework, Blade is the default template engine. Typically, Blade views are stored in view files. However, a question arose regarding the possibility of compiling Blade templates from strings rather than view files.

The provided code demonstrates an attempt to compile a Blade template from a string:

<code class="php">$string = '<h2>{{ $name }}</h2>';
echo Blade::compile($string, array('name' => 'John Doe'));</code>
登入後複製

To extend the functionality of BladeCompiler, a custom BladeCompiler class was created. The new compileWiths() method takes a string and an array of arguments as inputs. It compiles the string, extracts the passed arguments, and evaluates the compiled code within an exception handler.

The updated code below shows the implementation:

<code class="php">namespace Laravel\Enhanced;

use Illuminate\View\Compilers\BladeCompiler as LaravelBladeCompiler;

class BladeCompiler extends LaravelBladeCompiler {

    /**
     * Compile blade template with passing arguments.
     *
     * @param string $value HTML-code including blade
     * @param array $args Array of values used in blade
     * @return string
     */
    public function compileWiths($value, array $args = array())
    {
        $generated = parent::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('?&gt;'.$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;
    }

}</code>
登入後複製

以上是Laravel 中如何從字串編譯 Blade 模板?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!