【问题标题】:Can I use the Blade templating engine outside of Laravel?我可以在 Laravel 之外使用 Blade 模板引擎吗?
【发布时间】:2017-03-09 11:56:34
【问题描述】:

我想创建一个设计模式并使用“刀片模板引擎”。 我可以在 Laravel 之外使用 Blade 模板引擎并在我的新模式中使用它吗?

【问题讨论】:

    标签: php design-patterns frameworks blade


    【解决方案1】:

    Matt Stauffer 创建了一个完整的存储库,向您展示了如何在 Laravel 之外直接使用各种 Illuminate 组件。我建议您按照他的示例并查看他的源代码。

    https://github.com/mattstauffer/Torch

    这是在 Laravel 之外使用 Laravel Views 的 index.php

    https://github.com/mattstauffer/Torch/blob/master/components/view/index.php

    你可以围绕它编写一个自定义包装器,这样你就可以像 Laravel 一样调用它

    use Illuminate\Container\Container;
    use Illuminate\Events\Dispatcher;
    use Illuminate\Filesystem\Filesystem;
    use Illuminate\View\Compilers\BladeCompiler;
    use Illuminate\View\Engines\CompilerEngine;
    use Illuminate\View\Engines\EngineResolver;
    use Illuminate\View\Engines\PhpEngine;
    use Illuminate\View\Factory;
    use Illuminate\View\FileViewFinder;
    
    function view($viewName, $templateData)
    {
        // Configuration
        // Note that you can set several directories where your templates are located
        $pathsToTemplates = [__DIR__ . '/templates'];
        $pathToCompiledTemplates = __DIR__ . '/compiled';
    
        // Dependencies
        $filesystem = new Filesystem;
        $eventDispatcher = new Dispatcher(new Container);
    
        // Create View Factory capable of rendering PHP and Blade templates
        $viewResolver = new EngineResolver;
        $bladeCompiler = new BladeCompiler($filesystem, $pathToCompiledTemplates);
    
        $viewResolver->register('blade', function () use ($bladeCompiler) {
            return new CompilerEngine($bladeCompiler);
        });
    
        $viewResolver->register('php', function () {
            return new PhpEngine;
        });
    
        $viewFinder = new FileViewFinder($filesystem, $pathsToTemplates);
        $viewFactory = new Factory($viewResolver, $viewFinder, $eventDispatcher);
    
        // Render template
        return $viewFactory->make($viewName, $templateData)->render();
    }
    

    然后您可以使用以下方式调用它

    view('view.name', ['title' => 'Title', 'text' => 'This is text']);
    

    【讨论】:

      【解决方案2】:

      记录在案:

      我测试了许多库以在 Laravel 之外运行刀片(我不使用),并且大多数都是原始库的糟糕黑客,它们只是简单地复制和粘贴代码并删除了一些依赖项,但它保留了 Laravel 的许多依赖项。

      所以我(为一个项目)创建了一个刀片的替代方案,它的免费(MIT 许可证,即封闭源代码/私有代码是可以的)在一个单个文件中并且没有外部库的单一依赖项。您可以下载该课程并开始使用它,也可以通过 composer 安装。

      https://github.com/EFTEC/BladeOne

      https://packagist.org/packages/eftec/bladeone

      没有 Laravel 自己的功能(扩展),它是 100% 兼容的。

      它是如何工作的:

      <?php
      include "lib/BladeOne/BladeOne.php";
      use eftec\bladeone;
      
      $views = __DIR__ . '/views'; // folder where is located the templates
      $compiledFolder = __DIR__ . '/compiled';
      $blade=new bladeone\BladeOne($views,$compiledFolder);
      echo $blade->run("Test.hello", ["name" => "hola mundo"]);
      ?>
      

      另一种选择是使用 twig,但我对其进行了测试,但我不喜欢它。我喜欢 Laravel 的语法,它接近 ASP.NET MVC Razor。

      编辑:到目前为止(2018 年 7 月),它实际上是唯一一个在没有 Laravel 的情况下支持 Blade 5.6 新功能的模板系统。 ;-)

      【讨论】:

        【解决方案3】:

        是的,你可以在任何你喜欢的地方使用它。只需安装 composer 上可用的众多软件包之一即可。

        如果您有兴趣将其与 codeigniter 集成,我在这里有一篇博文概述了这里的过程:http://mstd.eu/index.php/2017/03/02/using-the-laravel-blade-templating-engine-in-codeigniter-3/

        按照上述步骤应该可以清楚地了解如何将其包含到任何框架中。

        【讨论】:

          【解决方案4】:

          你当然可以,packagist 上有很多独立的刀片选项,只要你对作曲家感到满意,那么应该没有问题,this one 看起来很有趣,因为与下载相比,星星的百分比非常高.

          请注意,尽管我自己没有尝试过,就像你一样,我正在为我自己的项目寻找一个独立的选项并且遇到了它,但我会在不久的将来的某个时候给它一个真正好的锻炼,

          【讨论】:

          • 我还使用了他的另一个包:date。他是一个可靠的开发者恕我直言。
          • @MartinJJ 关于它对您的项目的效果有什么更新吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-03-05
          • 2018-07-07
          • 1970-01-01
          • 1970-01-01
          • 2020-10-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多