Nano Hash - криптовалюты, майнинг, программирование

Laravel автоматически экранирует атрибуты модели

Я реализую метод автоматического экранирования (htmlentities) данных, полученных пользователем, перед возвратом. На данный момент у меня есть BaseModel, от которой наследуются все остальные модели, реализованные следующим образом:

<?php

class BaseModel extends Eloquent
{
    public function getAttribute($key)
    {
        $value = parent::getAttribute($key);

        // Escape required fields when necessary
        if (isset($this->escapable) && in_array($key, $this->escapable)) {
            $value = e($value);
        }

        return $value;
    }

    public function attributesToArray()
    {
        $array = parent::attributesToArray();

        if (isset($this->escapable)) {
            array_walk($array, function (&$value, $key) {
                if (in_array($key, $this->escapable)) {
                    $value = e($value);
                }
            });
        }

        return $array;
    }

}

В самой модели я просто расширяю BassModel вместо Eloquent и устанавливаю массив $escapable почти так же, как атрибут $fillable

protected $escapable = [
    'first_name',
    'last_name',
    /* etc */
];

Это работает на 100% при извлечении отдельного атрибута - getAttribute($key) - и при возврате всей коллекции - attributesToArray(), мой вопрос: есть ли другие ситуации, которые я не учел, которые могут позволить вернуть неэкранированные данные? Я вижу, что в Model.php есть функция getAttributes(), в каких ситуациях она будет вызываться?


Ответы:


1

Я думаю, что вы довольно экономны с этой реализацией.

getAttributes() используется внутри только один раз, и это при работе со сводными моделями. Не нужно беспокоиться об этом.

03.02.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..