这是在 laravel 中构建 templating/layouts 系统的好方法吗?将数据保存到数据库会更好吗?

Is this a good approach for building a templating/layouts system in laravel? Would it better to save data to a database?

我正在构建一个 Laravel PHP 应用程序,用户可以在其中创建 'layouts' 页面。

要制作布局,用户在表单中输入 HTML 并且他们可以选择指定区域,在创建使用此布局的页面时,所见即所得编辑器将允许编辑器添加内容。

现在发生的是 HTML 作为 .blade.php 文件保存在 /storage/templates/layouts 中。用户使用 blade 的 @yield 指令指定可编辑区域。每个可编辑区域都用 @section 指令包裹,并连接成一个 .blade.php 文件,并添加 @extends() 指令,引用布局。然后保存在/storage/templates/pages中。当请求页面时,它只是 returns 视图作为普通 blade 视图 return view('templates.pages.{page_slug}');.

就性能、安全性和可维护性而言,这是一种好方法吗?将这些数据存储在数据库中会更好吗?有什么改进建议吗?

我认为这不利于安全目的。如果我没理解错的话,用户可以输入blade码吗?或者存储在 blade 文件中的 html 代码?如果是这样,他们可以在您的服务器上执行 PHP 代码。例如,如果我在 html 文件中写入:

@php(\App\User::first()->some_data)

我可以获取所有用户数据,删除所有文件,基本上可以控制一切。我可能只将 HTML 存储在普通文件或数据库中,并加载它们: {!! $userPage->htmlCode !!} 或其他东西。所以他们可以输入 html 代码但不能输入 PHP / Blade 代码。

如有任何问题,请随时发表评论!