web-dev-qa-db-ja.com

Laravel外でブレードテンプレートエンジンを使用できますか?

デザインパターンを作って「ブレードテンプレートエンジン」を使いたい。 Laravel以外でBladeテンプレートエンジンを使用して、新しいパターンで使用できますか?

11
Ahmed tiger

記録のために:

私は多くのライブラリをテストしてブレードを外部で実行しましたLaravel(私は使用しません))と、ほとんどは元のライブラリの貧弱なハックであり、単にコードをコピーして貼り付け、いくつかの依存関係を削除しましたが、 Laravelの多くの依存関係。

だから私は(プロジェクトの)ブレードの代替を作成しました単一のファイルで外部ライブラリの単一の依存関係なしで無料(MITライセンス、つまりソース/プライベートコードを閉じることはOKです) 。クラスをダウンロードして使い始めるか、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に近いため、かみそり。

編集:この日付(2018年7月)までは、Laravelを使用しないBlade 5.6の新機能をサポートするのは、これが事実上唯一のテンプレートシステムです。 ;-)

20
magallanes

確かにできます。composerに問題がない場合、packagistにはスタンドアロンのブレードオプションがたくさんありますが、問題はないはずです これ はかなり興味深いように見えますダウンロードに比べて星の割合が非常に高いためです。

自分で試したわけではありませんが、自分のプロジェクトのスタンドアロンオプションを探していてそれに出くわしたように、警告が表示されます。近い将来、いつか本当に良いワークアウトができるようになります。

1
MartinJJ

Matt Staufferは、さまざまなIlluminateコンポーネントをLaravelの外部で直接使用する方法を示すリポジトリ全体を作成しました。私は彼の例に従って、彼のソースコードを見ることをお勧めします。

https://github.com/mattstauffer/Torch

Laravel Laravel外のビューを使用する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']);
0
ben

はい、好きな場所で使用できます。 composerで利用可能な多くのパッケージの1つをインストールするだけです。

Codeigniterとの統合に興味がある場合は、ここにプロセスの概要を記したブログ投稿があります。 http://mstd.eu/index.php/2017/03/02/using-the-laravel-blade -templating-engine-in-codeigniter-3 /

上記の手順に従うと、それをフレームワークに組み込む方法が明らかになります。

0
twigg