Учитывая следующий код:
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;
}
Однако это не сработало.
Первый называется Accessor. Последний setAbsolutePathAttribute является мутатором. Если вы заставите свой Accesor возвращать значение фиксированный, я думаю, у вас мало надежды на то, что вы попытаетесь получить что-то другое позже.






Поэтому я не рекомендую пытаться решить эту проблему, переопределив мутатор. Возможно, вы сможете, но чем меньше вы касаетесь ядра 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;
}
}
Таким образом, он что-то делает, только если в нем нет никакой ценности.
спасибо за ответ, я вроде подумал, что это невозможно
Я считаю, что вариант 2 должен быть «Сделайте свой аксессуар умнее»
Чего именно вы пытаетесь достичь? Почему
getAbsolutePathAttribute()возвращает фиксированное значение?