You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Laravel Validated DTO类中未定义属性访问错误?

修复方案

1. 修正DTO类的结构

该包的DTO设计不需要手动声明public属性,字段通过rules方法定义验证规则,casts方法配置类型转换即可。确保你的DTO继承正确的基类并配置规则:

namespace App\DTO;

use WendellAdriel\ValidatedDTO\ValidatedDTO;
use WendellAdriel\ValidatedDTO\Casts\StringCast;

class ItemsFilterDTO extends ValidatedDTO
{
    protected function rules(): array
    {
        return [
            'sortBy' => 'nullable|string',
        ];
    }

    protected function casts(): array
    {
        return [
            'sortBy' => new StringCast(),
        ];
    }
}

2. 添加PHPDoc让Larastan识别属性

由于该包通过魔术方法__get提供属性访问,Larastan默认无法自动识别这些动态属性。在DTO类上添加@property标签明确属性类型:

/**
 * @property ?string $sortBy
 */
class ItemsFilterDTO extends ValidatedDTO
{
    // 规则与转换配置
}

3. 正确初始化DTO实例

在控制器中通过官方提供的方法创建DTO,确保字段被正确加载:

// 从请求初始化
$filtersDTO = ItemsFilterDTO::fromRequest($request);

// 或从数组初始化
$filtersDTO = ItemsFilterDTO::fromArray(['sortBy' => $request->input('sortBy')]);

// 正常访问属性
$sortByValue = $filtersDTO->sortBy;

4. 可选:优化Larastan全局配置

如果项目中有大量DTO,可在phpstan.neon中添加规则避免重复添加PHPDoc:

parameters:
    ignoreErrors:
        - '#Access to an undefined property WendellAdriel\\ValidatedDTO\\ValidatedDTO\$.*#'

注意:此方式会屏蔽所有ValidatedDTO的未定义属性错误,更推荐用PHPDoc标签的精准方式。


内容的提问来源于stack exchange,提问作者Petro Gromovo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:12:45