В Laravel версии 9 я пытаюсь использовать Accessor с условием if
внутри; Проще говоря, мне нужно использовать Accessor для атрибута postImage
моего приложения, только если путь к изображению не начинается с терминов «http://» или «https://» (чтобы источники изображения поступающие с другого веб-сайта, будут отображаться правильно без каких-либо манипуляций с их путями), но нигде я не могу найти правильный способ сделать это с точки зрения нового синтаксиса Laravel 9 Accessor (и Mutator).
Аксессуар атрибута postImage
в моей модели Post (я знаю, что это неправильно, но я пытаюсь найти правильный способ сделать это, и в этом суть):
protected function postImage():Attribute {
return Attribute::make(
get: fn ($value) =>
if (strpos($value, 'https://') !== FALSE || strpos($value, 'http://') !== FALSE) {
return $value;
}
return asset('storage/' . $value);
);
}
Не могли бы вы помочь мне с новым подходящим подходом к тому, что я пытаюсь сделать?
Используйте другой формат функции (с возвратом)
protected function postImage():Attribute {
return Attribute::make(
get: function ($value) {
if (strpos($value, 'https://') !== FALSE || strpos($value, 'http://') !== FALSE) {
return $value;
}
return asset('storage/' . $value);
}
);
}
Или правильно использовать новый формат (со значением, без возврата)
protected function postImage():Attribute {
return Attribute::make(
get: fn ($value) => (strpos($value, 'https://') !== FALSE || strpos($value, 'http://') !== FALSE) ? $value : asset('storage/' . $value),
);
}