在 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 中动态创建刀片的主要内容,如果未能解决你的问题,请参考以下文章

在刀片 foreach 循环中使用 JS 动态更改 div CSS 背景

在刀片中动态创建复选框

Laravel 路由动态路由控制器到刀片模板

在 laravel 刀片模板中动态更改每个用户的背景图像

如何在 Laravel 刀片中使用动态表列值设置宽度

使用 Javascript 在 Laravel 刀片视图中显示数组中的动态数据时出现问题