Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день! Кто может подсказать? в моделях есть читатели и преобразователи. возможно ли сделать так, чтобы преобразователь был не к 1 полю модели как например
public function setTextAttribute($value)
{
$this->attributes['text'] = htmlspecialchars($value);
}
только для поля text, а чтобы тоже самое выполнялось и еще для некоторых полей модели? (title, description и тд)
Не в сети
Возможно. Делайте по этому же образцу.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Возможно. Делайте по этому же образцу.
так это я знаю, что можно прописать для каждого
public function setTitleAttribute($value)
{
$this->attributes['title'] = htmlspecialchars($value);
}
и в таком духе дальше)
у меня вопрос, нельзя ли это как-то объединить в одно? для всех полей или указать для каких именно? функционал то одинаковый
Изменено Yuliya (03.04.2019 16:15:54)
Не в сети
Нельзя.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Красиво и лаконично делается кастинг полей. Ваш случай в него не попадает. Вообще делать htmlspecialchars перед записью в базу это плохая практика. Это костыль. Когда вам понадобится получить непреобразованное значение, будете строит новый костыль на костыле.
Изменено artoodetoo (03.04.2019 16:56:07)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
То есть можно описать кастинг, но конкретно делать htmlspecialchars перед записью в базу это плохая практика. Это костыль. Когда вам понадобится получить непреобразованное значение, будете строит новый косталь на костыле.
а что вы тогда можете посоветовать, чтобы избежать сохранения нежелательных тегов?
Не в сети
Вернитесь к началу и сформулируйте почему они вдруг нежелательные. Если вам надо недопустить ввод данных с тегами, используйте валидацию. Если надо избежать инъекции тегов при выводе страницы, шаблонизатор это сделает за вас. По умолчанию теги экранируются.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Если надо избежать инъекции тегов при выводе страницы, шаблонизатор это сделает за вас. По умолчанию теги экранируются
шаблонизатор это делает. но у меня REST API и тогда получается, мне придется на фронт стороне это делать ручными методами
Не в сети
Обычная практика — экранировать при выводе.
Если я напишу здесь на форуме в теле сообщениия <scipt>alert('OOPS!');</script> этот тег не выполнится потому что htmlspecialchars делается при выводе на страницу. Но в базе в поле posts.message этот текст будет сохранён в целости как есть.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
шаблонизатор это делает. но у меня REST API и тогда получается, мне придется на фронт стороне это делать ручными методами
на клиентской стороне тоже бывают шаблоны или можно экранировать данные при отдаче на серверной стороне.
Изменено artoodetoo (03.04.2019 17:07:08)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Спасибо Вам большое за советы!) буду экранировать при выводе значит
Не в сети
Не за что. Для спасибо есть кнопка со стрелкой вверх. Нам платят за лайки
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Апну тему.
Reusable accessors/mutators (getters/setters) for Laravel 5's Eloquent:
https://github.com/topclaudy/eloquent-mutators
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use \Awobaz\Mutator\Mutable;
protected $accessors = [
'title' => ['trim_whitespace', 'capitalize'],
'content' => ['trim_whitespace', 'remove_extra_whitespace'],
];
}
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Страницы 1