Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 03.04.2019 10:36:47

преобразователи в модели

Добрый день! Кто может подсказать? в моделях есть читатели и преобразователи. возможно ли сделать так, чтобы преобразователь был не к 1 полю модели как например

public function setTextAttribute($value)
    {
        $this->attributes['text'] = htmlspecialchars($value);
    }

только для поля text, а чтобы тоже самое выполнялось и еще для некоторых полей модели? (title, description и тд)

Не в сети

#2 03.04.2019 16:11:27

Re: преобразователи в модели

Возможно. Делайте по этому же образцу.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 03.04.2019 16:15:10

Re: преобразователи в модели

Возможно. Делайте по этому же образцу.

так это я знаю, что можно прописать для каждого

public function setTitleAttribute($value)
    {
        $this->attributes['title'] = htmlspecialchars($value);
    }

и в таком духе дальше)
у меня вопрос, нельзя ли это как-то объединить в одно? для всех полей или указать для каких именно? функционал то одинаковый

Изменено Yuliya (03.04.2019 16:15:54)

Не в сети

#4 03.04.2019 16:47:05

Re: преобразователи в модели

Нельзя.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 03.04.2019 16:49:19

Re: преобразователи в модели

Красиво и лаконично делается кастинг полей. Ваш случай в него не попадает. Вообще делать 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.

Не в сети

#6 03.04.2019 16:55:51

Re: преобразователи в модели

То есть можно описать кастинг, но конкретно делать htmlspecialchars перед записью в базу это плохая практика. Это костыль. Когда вам понадобится получить непреобразованное значение, будете строит новый косталь на костыле.

а что вы тогда можете посоветовать, чтобы избежать сохранения нежелательных тегов?

Не в сети

#7 03.04.2019 16:58:32

Re: преобразователи в модели

Вернитесь к началу и сформулируйте почему они вдруг нежелательные. Если вам надо недопустить ввод данных с тегами, используйте валидацию. Если надо избежать инъекции тегов при выводе страницы, шаблонизатор это сделает за вас. По умолчанию теги экранируются.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#8 03.04.2019 17:00:12

Re: преобразователи в модели

Если надо избежать инъекции тегов при выводе страницы, шаблонизатор это сделает за вас. По умолчанию теги экранируются

шаблонизатор это делает. но у меня REST API и тогда получается, мне придется на фронт стороне это делать ручными методами

Не в сети

#9 03.04.2019 17:02:19

Re: преобразователи в модели

Обычная практика — экранировать при выводе.

Если я напишу здесь на форуме в теле сообщениия <scipt>alert('OOPS!');</script> этот тег не выполнится потому что htmlspecialchars делается при выводе на страницу. Но в базе в поле posts.message этот текст будет сохранён в целости как есть.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#10 03.04.2019 17:03:50

Re: преобразователи в модели

шаблонизатор это делает. но у меня REST API и тогда получается, мне придется на фронт стороне это делать ручными методами

на клиентской стороне тоже бывают шаблоны wink или можно экранировать данные при отдаче на серверной стороне.

Изменено artoodetoo (03.04.2019 17:07:08)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#11 03.04.2019 17:03:53

Re: преобразователи в модели

Спасибо Вам большое за советы!) буду экранировать при выводе значит

Не в сети

#12 03.04.2019 17:05:25

Re: преобразователи в модели

Не за что. Для спасибо есть кнопка со стрелкой вверх. Нам платят за лайки wink


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#13 23.04.2019 15:23:30

Re: преобразователи в модели

Апну тему.

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.

Не в сети

Подвал раздела