在 laravel 中动态创建刀片
Posted
技术标签:
【中文标题】在 laravel 中动态创建刀片【英文标题】:Dynamically creating a blade in laravel 【发布时间】:2021-11-29 15:23:04 【问题描述】:我正在做这个项目,我想让管理员用户为网站创建自定义页面。
是否可以不将用户请求保存在数据库中,而是在我的 createpage.blade.php 中有一个按钮,当用户按下它时,它会在包含用户请求的视图文件夹中为我创建一个刀片?
P.S:我也希望它在 web.php 中创建一个路由,但这并不重要
【问题讨论】:
刀片文件中应该包含什么? 为什么没有一个带有内容属性的页面模型,然后将所有内容存储在数据库中,并动态加载它们。我的意思是我看不到创建刀片文件的用途,刀片文件需要与文件系统交互,还需要更改 web.php。对不起,但你需要解释更多。 我从用户那里得到的数据是html和css代码,甚至可能是javascript(使用像summernote等文本编辑器)。我怀疑从数据库中读取它是否安全。 @Koussay html、css 和 javascript。我将使用诸如summernote @mrhn 之类的文本编辑器来完成此操作 【参考方案1】:是的,您可以在 Laravel 中使用Storage::put()
方法动态创建页面。试试这个代码:
$pageContent = "@extends('layouts.app')
@section('title', '".\Request::input('page_name')."')
@section('page-header')
<h1>
'".\Request::input('page_name')."'
</h1>
@endsection
@section('content')
<div class='container'>
'".\Request::input('page_content')."'
</div>
@endsection
@section('script')
<script>
</script>
@endsection
@section('style')
<style>
</style>
@endsection
";
$project_name = 'your_project_name';
\Storage::disk('disk_path')->put($project_name.'/resources/views/new-page.blade.php', $pageContent);
并将此磁盘添加到磁盘下的 filesystem.php 中:
'disk_path' => [
'driver' => 'local',
'root' => 'E:\xampp\htdocs',
'visibility' => 'public',
],
并使用fopen()
在 web.php 中写入路由
【讨论】:
非常感谢!【参考方案2】:因此,根据您的需要,您可以使用 Summernote 或任何所见即所得的编辑器来编写 HTML/CSS/JS 纯代码并将其存储在数据库中,然后使用一个刀片文件加载内容并在刀片上使用此语法渲染它
!! !!
但如果是用户生成的内容,您必须阅读此警告
在回显应用程序用户提供的内容时要非常小心。在显示用户提供的数据时,您通常应该使用转义的双花括号语法来防止 XSS 攻击。
更新: 您可以使用第三方包来保护您的代码 https://github.com/mewebstudio/Purifier
在此处进一步阅读https://laravel.com/docs/8.x/blade#displaying-unescaped-data
【讨论】:
谢谢,我不知道有这个包 您可以将问题标记为已回答。谢谢以上是关于在 laravel 中动态创建刀片的主要内容,如果未能解决你的问题,请参考以下文章