Я использую последнюю версию PhpStorm (2022.3.1) и Laravel 9+. Это не огромная проблема, а скорее бельмо на глазу.
По какой-то причине, когда я использую модель для создания пользовательского атрибута следующим образом:
public function getFormattedStartDateAttribute(): string
{
if (!$this->start_date) {
return 'TBD';
} else {
return $this->start_date->format('M. d, Y');
}
}
И используйте в представлении, как это или это:
{{ $event->formattedStartDate }}
{{ $event->formatted_start_date }}
PhpStorm по-прежнему говорит, что у метода есть no usages?
Изображение:
Есть ли способ исправить это? Я попытался переиндексировать свой проект. Это новая функция под названием Code Vision.
«И использовать в представлении, как это или это:» PhpStorm здесь правильный - нет явного / прямого использования метода getFormattedStartDateAttribut(). Этот метод вызывается под капотом Laravel. И PhpStorm не предоставляет каких-либо специфичных для Laravel функций. Во всяком случае, он предоставляется специальным плагином Laravel (например, Laravel Idea). Поэтому вам лучше связаться с автором плагина, чтобы узнать, что он может сделать, чтобы сообщить PhpStorm, что вызов $event->formatted_start_date на самом деле является косвенным использованием метода getFormattedStartDateAttribute().
Хорошо, спасибо за помощь. Я свяжусь с автором плагина.
На самом деле я не думаю, что это связано с плагином Laravel Idea. Я отключил его, и данные об использовании все еще отображаются. Думаю, я свяжусь с PhpStorm.
"и данные об использовании все еще отображаются" - что вы имеете в виду? «Без использования» — это часть последней функции PhpStorm Code Vision.
«На самом деле я не думаю, что это связано с плагином Laravel Idea. Я отключил его, и данные об использовании все еще отображаются». Конечно. Потому что это основная функциональность PhpStorm. НО связь/ссылка между formatted_start_date и getFormattedStartDateAttribute() должна быть установлена/предоставлена чем-то (плагином???), который ЗНАЕТ, как фреймворк Laravel работает под капотом. И поскольку PhpStorm НЕ предоставляет никаких функций, специфичных для Laravel... он не может этого сделать и правильно пишет "без мудрецов". Период.
@NicoHaase Демонстрация использования метода является частью последней версии PhpStroms. Называется «Видение кода для PHP». Я думал, что это могло принадлежать тому плагину Laravel Idea. Поэтому, когда я говорю: «Данные об использовании не отображаются», я имею в виду, что над методом getFormattedStartDateAttribute() должно быть «1 использование», поскольку я использую его в представлении.
@LazyOne Тогда почему он показывает обычаи, когда я это делаю? public function isGuest(): bool { return $this->participant_parent_id !== null; } Просмотр кода не работает с атрибутами? Когда я использую {{ $participant->isGuest() }} в представлении, это показывает, что я использую это 3 раза в своем коде.
@ daugaard47 Пожалуйста, попробуйте перечитать комментарии, которые написали я и Нико Хаасе - ту часть, откуда берется «справочная» информация. Если IDE НЕ знает, что вызов $event->formatted_start_date на самом деле делает СКРЫТЫЙ вызов getFormattedStartDateAttribute() под капотом, то КАК он должен написать «1 использование»? Это знание должно быть откуда-то, верно?
@ daugaard47 Относительно isGuest() -- судя по вашему примеру, здесь использование прямое и явное -- $participant->isGuest().
@LazyOne Хорошо, я понимаю, что ты сейчас говоришь. Спасибо вам за помощь.
Эту проблему очень легко решить, вы можете использовать barryvdh/laravel-ide-helper, а затем запустить php artisan ide:model, который просмотрит модели и создаст блок PHPDoc (вы можете добавить параметры и создать их в том же файле модели или в новом файле, где у вас есть только эти блоки PHPDock), и PHPStorm прочитает этот блок документации и узнает, когда вы вызываете attributeWhatever, какой тип.
Он добавит это в вашем случае:
/**
* @property string $formattedStartDate
*/
Таким образом, любая IDE, способная понимать блоки PHPDock, поймет, что когда вы делаете $class->formattedStartDate, вы ссылаетесь на этот блок, и он относится к типу string.
НО, никакая IDE (если не использовать плагин, о котором я не знаю) не поймет, что getFormattedStartDateAttribute -> formattedStartDate, так что вы все равно получите no usages за getFormattedStartDateAttribute, но, по крайней мере, сможете отслеживать formattedStartDate и делать с ним что хотите.
Один быстрый совет: если вы используете Laravel 9+, измените этот код с:
public function getFormattedStartDateAttribute(): string
{
if (!$this->start_date) {
return 'TBD';
} else {
return $this->start_date->format('M. d, Y');
}
}
К:
public function formattedStartDate(): \Illuminate\Database\Eloquent\Casts\Attribute
{
return Attribute::get(
function ($value, $attributes) {
if (! $attributes['start_date']) {
return 'TBD';
} else {
return $attributes['start_date']->format('M. d, Y');
}
}
);
}
Почему? Поскольку использование getFormattedStartDateAttribute — это старый способ, Laravel 9+ упростил его, читайте об Аксессорах.
Обратите внимание, что getXXXXAttribute и setXXXXAttribute больше нет в документации.
Похоже, вы должны открыть проблему в трекере этого плагина. Сам PhpStorm не может знать, что любое событие в шаблоне Blade приводит к вызову этой функции. Кроме того, вы устанавливали какие-либо подсказки для модели в шаблоне?