php 我可以在Laravel之外使用Blade模板引擎吗?

ajsxfq5m  于 2023-02-21  发布在  PHP
关注(0)|答案(4)|浏览(179)

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

bttbmeg0

bttbmeg01#

为了记录在案:
我测试了许多库运行刀片以外的Laravel(我不使用),大多数是穷人黑客的原始库,简单地复制和粘贴代码,并删除了一些依赖性,但它保留了大量的依赖性Laravel。
所以我(为一个项目)创建了一个blade的替代品,它是免费的(MIT许可证,即关闭源代码/私有代码是可以的),在一个单个文件中,没有外部库的单一依赖性。你可以下载这个类并开始使用它,或者你可以通过composer安装。
https://github.com/EFTEC/BladeOne
https://packagist.org/packages/eftec/bladeone
它是100%兼容没有Laravel自己的功能(扩展).
工作原理:

<?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.NETMVCRazor。

    • 编辑:到目前为止(2018年7月),它实际上是唯一一个不支持Laravel的Blade 5.6新特性的模板系统。-)**
mrphzbgm

mrphzbgm2#

你当然可以,在packagist上有很多独立的刀片选项,只要你对composer感到舒服,那么就应该没有问题,this one看起来很有趣,因为与下载相比,它的星级比例非常高。
请注意,虽然我还没有尝试过它自己,像你一样,我正在寻找一个独立的选择,为我自己的项目,并遇到了它,我会给它一个真实的的良好锻炼,虽然在不久的将来的某个时候,

wixjitnu

wixjitnu3#

Matt Stauffer创建了一个完整的存储库,向您展示了如何直接在Laravel之外使用各种Illuminate组件。我建议您遵循他的例子,查看他的源代码。
https://github.com/mattstauffer/Torch
下面是在Laravel之外使用Laravel视图的index.php
https://github.com/mattstauffer/Torch/blob/master/components/view/index.php
您可以编写一个定制的 Package 器来 Package 它,这样就可以像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']);
ncgqoxb0

ncgqoxb04#

是的,你可以在任何你喜欢的地方使用它。只要安装一个包的许多可用的 composer 为它。
如果你有兴趣把它和codeigniter集成在一起,我有一个blog post here outlining the process
遵循上述步骤应该可以清楚地了解如何将其包含到任何框架中。

相关问题