laravel PhpStorm没有get属性的用法

kb5ga3dv  于 2023-01-14  发布在  PHP
关注(0)|答案(1)|浏览(123)

我使用的是最新版本的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
图片:

有什么办法可以解决这个问题吗?我试过重新索引我的项目。这是一个新的功能,称为代码视觉。

rta7y2nd

rta7y2nd1#

这个问题很容易解决,你可以使用barryvdh/laravel-ide-helper,然后运行php artisan ide:model,这将检查模型并创建一个PHPDoc块(你可以添加选项,并在同一个模型文件或一个只有这个PHPDock块的新文件中创建它们),PHPSorm将读取这个doc块,并知道当你调用attributeWhatever时是什么类型。
它将在您的案例中添加以下内容:

/**
 * @property string $formattedStartDate
 */

这样,任何能够理解PHPDock块的IDE都将理解,当您执行$class->formattedStartDate时,您引用的是那个块,它的类型为string
但是,没有IDE(除非使用我不知道的插件)会理解getFormattedStartDateAttribute-〉formattedStartDate,所以您仍然会得到getFormattedStartDateAttributeno usages,但至少您可以跟踪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+使它变得更容易,阅读有关访问器的信息。
可以看到getXXXXAttributesetXXXXAttribute甚至不再出现在文档中。

相关问题