Доступ к свойствам объекта в блейде при использовании таблицы - PullRequest
0 голосов
/ 14 января 2020

Я создал форму, где администратор может создавать текст, а также использовать объекты, которые используются в Blade. Я хочу сохранить текст в таблице, а затем отобразить его в HTML с правильно работающими объектами.

Например, у меня была бы форма с этим вводом в моем представлении

  <div class='form-group'>
    <textarea placeholder="" name='comments' type='' rows='10' class='form-control' id='' value = '{{ old('comments') ?? $plansubmission->comments }}'>{{ $plansubmission->comments }}</textarea>
    <div>{{ $errors->first('comments') }}</div>
  </div>

В этой форме ввода я ввел следующее:

Dear Employee,  {{ $plansubmission->id }}

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

Теперь я хочу вернуть столбец комментариев обратно в представление со всем интервалом, который был передан во вход (поэтому я использую теги 'pre'):

<code><pre> {{ $plansubmission->comments}}  

Текст плана и интервал сохраняются, но часть лезвия просто появляется как {{$planubmission-> id}} вместо фактического свойства.

1 Ответ

0 голосов
/ 15 января 2020

Это серьезная проблема безопасности, позволяющая пользователям отправлять шаблоны блейдов для отображения данных. Blade скомпилирован в PHP, так что вы, по сути, позволяете пользователям выполнять любой код PHP, который они хотят. Я бы порекомендовал вам использовать что-то вроде усы , чтобы позволить пользователям вводить переменные в вывод.

В контроллере, который передает данные в представление, вы можете пропустить $plansubmission->comments через усы синтаксический анализатор. Это будет рассматривать поле комментариев как шаблон, а второй параметр устанавливает переменные, к которым у шаблона есть доступ. Таким образом, вы можете явно указать, к чему имеет доступ шаблон комментария, чтобы вы не позволяли пользователям пропускать больше данных, чем требуется.

$m = new Mustache_Engine;
$comments = $m->render($plansubmission->comments, $plansubmission->toArray());

Затем пользователи могут добавить что-то подобное в поле комментариев

Dear Employee,  {{ id }}

Затем в представлении выполните

<code><pre> {{ $comments }} 

, и он выдаст

<code><pre> Dear Employee,  123  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...