Заменить значение мутатора красноречиво

Учитывая следующий код:

class Picture {

    public function getAbsolutePathAttribute() {
        return "absolute_path"
    }
}

$picture = new Picture();
echo $picture->absolute_path; // prints "absolute_path"

$picture->absolute_path = "I will override you no matter what";
echo $picture->absolute_path; // prints "absolute_path"

Есть ли способ переопределить красноречивый атрибут мутатора?

Я пробовал волшебный метод:

setAbsolutePathAttribute($value) {
    $this["attributes"] = $value;
}

Однако это не сработало.

Чего именно вы пытаетесь достичь? Почему getAbsolutePathAttribute() возвращает фиксированное значение?

Jonas Staudenmeir 05.04.2018 23:38

Первый называется Accessor. Последний setAbsolutePathAttribute является мутатором. Если вы заставите свой Accesor возвращать значение фиксированный, я думаю, у вас мало надежды на то, что вы попытаетесь получить что-то другое позже.

MarkSkayff 05.04.2018 23:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
839
1

Ответы 1

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

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

Итак, два способа решить эту проблему, учитывая ваш простой пример:

1. Создайте значение по умолчанию на уровне базы данных.

Миграции Laravel имеют модификатор столбца по умолчанию, он выглядит примерно так: ->default('something')

Таким образом, вам вообще не понадобится мутатор для получения искомого значения по умолчанию.

Вы можете прочитать о них здесь: https://laravel.com/docs/5.6/migrations#column-modifiers

2. Сделайте свой аксессуар умнее.

Ваш пример довольно прост, поэтому я буду работать с ним:

class Picture {

    public function getAbsolutePathAttribute() {
        if (is_null($this->absolute_path)) {
             return "absolute_path";
        }

        return $this->absolute_path;
     }
}

Таким образом, он что-то делает, только если в нем нет никакой ценности.

спасибо за ответ, я вроде подумал, что это невозможно

Ivan Hanák 06.04.2018 14:16

Я считаю, что вариант 2 должен быть «Сделайте свой аксессуар умнее»

Jon McClung 10.01.2019 21:24

Другие вопросы по теме