Это хороший подход для построения системы шаблонов / макетов в laravel? Будет ли лучше сохранить данные в базе данных? - PullRequest
0 голосов
/ 12 января 2019

Я создаю приложение Laravel PHP, где пользователь сможет создавать «макеты» для страниц.

Чтобы сделать макет, пользователь вводит HTML в форму, и при желании он может указать области, в которых при создании страницы, использующей этот макет, редактор WYSIWYG позволит редактору добавлять контент.

Что происходит сейчас, этот HTML-файл сохраняется в /storage/templates/layouts как .blade.php файл. Пользователь назначает редактируемые области с помощью директивы @yield лезвия. Каждая редактируемая область оборачивается директивой @section и объединяется в один файл .blade.php, и добавляется директива @extends(), ссылающаяся на макет. Затем он сохраняется в /storage/templates/pages. Когда страница запрашивается, она просто возвращает вид как обычный блэйд-вид return view('templates.pages.{page_slug}');.

С точки зрения производительности, безопасности и удобства обслуживания это хороший подход? Будет ли лучше хранить эти данные в базе данных? Есть предложения по улучшению?

1 Ответ

0 голосов
/ 12 января 2019

Я думаю, что это не хорошо в целях безопасности. Если я правильно понимаю, пользователь может ввести блейд-код? Или HTML-код, который хранится в блейд-файлах? Если это так, они могут выполнять код PHP на вашем сервере. Например, если я напишу в своем HTML-файле:

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

Я могу получить все пользовательские данные, удалить все файлы и в принципе могу контролировать все. Я бы, вероятно, сохранил только HTML в обычных файлах или в базе данных и загрузил бы их: {!! $userPage->htmlCode !!} или что-то в этом роде. Таким образом, они могут вводить HTML-код, но не код PHP / Blade.

Если у вас есть какие-либо вопросы, не стесняйтесь комментировать!

...