如何呈现包含刀片语法的字符串?
View::make('directory.file-name')->with('var', $var); // Usual usage
View::render('{{$var}}')->with('var', $var); // Like this for Example
我使用写了一个生成刀片语法的脚本,如果可能的话我想直接将它的输出提供给刀片引擎。
由于
答案 0 :(得分:2)
希望这有帮助,
https://github.com/TerrePorter/StringBladeCompiler
这是下一个链接的分支,它删除了db模型要求,并将其替换为需要三个必需键('template','cache_key','updated_at')的数组,而不是完整的Eloquent模型。
https://github.com/Flynsarmy/laravel-db-blade-compiler
这使用Eloquent模型来获取模板。
答案 1 :(得分:1)
我刚刚将Laravel 4.2作为Linux版本(使用shm创建临时文件)。它应该在另一个操作系统中工作,但通过通常的临时文件(稍慢)。
<?php
class FilesDeletionQueue {
protected $files = [];
public function add($filename) {
$this->files[] = $filename;
}
public function flush() {
$result = true;
foreach ($this->files as $filename) {
if (@unlink($filename) === false) {
$result = false;
}
}
return $result;
}
}
class Helpers {
static public function viewFromStr($tplName, $pageContent, array $data) {
global $app;
// Try to create temporary blade template file in shm memory,
// if fails, create as usual temporary file.
$tempname = tempnam('/run/shm/', 'laravel_blade');
if (@file_put_contents($tempname, $pageContent) === false) {
$tempname = tempnam(storage_path(), 'laravel_blade');
if (@file_put_contents($tempname, $pageContent) === false) {
throw new \Exception("Cannot create {$tempname} in " . __METHOD__);
}
}
// Create template from shm memory file.
$resolver = $app['view.engine.resolver'];
$finder = $app['view.finder'];
$env = new \Illuminate\View\Factory($resolver, $finder, $app['events']);
$env->setContainer($app);
$pageView = new \Illuminate\View\View(
$env,
$env->getEngineResolver()->resolve('blade'),
$tplName,
$tempname,
$data
);
$env->callCreator($pageView);
try {
$fdq = App::make('files_deletion_queue');
} catch (\Exception $e) {
App::singleton('files_deletion_queue', function() {
return new FilesDeletionQueue();
});
$fdq = App::make('files_deletion_queue');
App::shutdown(function() {
App::make('files_deletion_queue')->flush();
});
}
// Add tempname to list of files to be deleted when application ends.
$fdq->add($tempname);
return $pageView;
}
}
然后你可以像这样使用它:
$pageView = Helpers::viewFromStr('content', $pageContent, $this->data);
$this->layout->with('content', $pageView)
->with('menus', $this->menus )
->with('page',$this->data);
而不是:
/*
$this->layout->nest('content',"pages.template.{$row->filename}",$this->data)
->with('menus', $this->menus )
->with('page',$this->data);
*
*/
推荐的方法无法从任意操作系统路径中加载刀片文件,并且没有现成的开箱即用支持从RAM编译(我听说它更容易用于twig),这真的让人很难过