将刀片模板保存到数据库而不是文件

时间:2016-07-20 19:59:54

标签: php laravel laravel-5 blade

我想将blade模板保存到数据库,因为用户每页header and footer is customizable。我想让我的用户自己创建布局,然后对于给定用户的每个请求,我想使用该用户指定的布局来提供页面。

控制器传递的必要变量将在文档中提供给他们。

注意:我相信我的用户。他们都是项目的利益相关者,也是程序员,所以服务器端代码执行是可以接受的。

3 个答案:

答案 0 :(得分:1)

我意识到如果我只让他们插入静态内容,我可以提高安全性和缓存。我唯一需要改变的是主要内容,所以我可以让他们设置一个token来放置内容。正如@ huzaib-shafi的上述回答,我做了以下......

//In controller
$content = View::make('final',compact('data'));
$token = "<meta name='_token' content='" . csrf_token() ."'";
$scripts = View::make('final_scripts',compact('data'));

$view = str_replace_first("<%content%>", $content, $templateInDatabase);
$view = str_replace_first("<%token%>", $token, $view);
$view = str_replace_first("<%scripts%>", $scripts, $view);

return $view;

这会强制他们在模板中使用bootstrap,因为我在bootstrap styles模板中使用blade,但在我的情况下这是可以接受的。

答案 1 :(得分:1)

虽然这是一篇很老的帖子,但万一有人会像我一样偶然发现它。我在使用Laravel Framework时实现了类似的功能,通过在数据库中保存视图,每当我需要显示视图时,我从DB检索它,并使用file_put_contents() php函数将其加载到文件中并渲染它使用view()方法。例如;

$blade = DB::table('pages')->where('name', 'index')->first();
file_put_contents('template.blade.php', $blade->view);

//Note if I also need to pass data to the view I can also pass it like so
//$data = ['page_title' => 'Testing Blade Compilation using views Saved in DB'];
// return view(template, $data);

return view('template');

在我自己的情况下,为了增加安全性,我使用刀片模板方案创建了基本模板。在使用HTMLPurifier清理生成的输入并渲染视图后,注入用户创建的输入到模板中。例如

$view = view('base.template')->render();
//similarly like the above I can load any data into the view like so
//$data = ['page_title' => 'Testing Blade Compilation using views Saved in DB'];
//$view = view('base.template', $data)->render();

$purifier = new HTMLPurifier(HTMLPurifier_Config::createDefault());
$with_purified_input = $purifier->purify($user_generated_input);
str_replace('view_variable', $with_purified_input, $view);

return $view;

答案 2 :(得分:0)

前几天我问过并回答了类似的问题。据我所知,Blade不会处理来自数据库列的视图内容。虽然可以使用View的compileString()方法。但是你应该看看以下问题。

Extend Blade Template from Database stored string

Let users create custom blade layouts / store in database

相关问题