Laravel Nova中$request->pathInfo有值但访问返回null的问题咨询
问题现象
执行dd($request)打印Nova请求实例时,可见pathInfo属性值为"/nova-api/post-tags/20/update-fields",需要获取该路径值判断URL是否包含post-tags字段。
但直接执行dd($request->pathInfo);时返回结果为null,和全量打印的对象属性值不符。全量打印的对象核心结构如下:
Laravel\Nova\Http\Requests\NovaRequest {#1703 // 外层NovaRequest的其他属性... "request" => Illuminate\Http\Request {#43 // 内层Request的其他属性... #pathInfo: "/nova-api/post-tags/20/update-fields" #requestUri: "/nova-api/post-tags/20/update-fields?editing=true&editMode=update&..." // 其余属性省略 } }
产生原因
问题由两个原因共同导致:
- 属性可见性限制:打印输出里属性名前带
#前缀,代表这是PHP类的受保护(protected)属性,这类属性只允许在类内部的方法中访问,外部直接通过->属性名的方式无法读取,会返回null。 - 找错了属性所属的对象:你看到的
#pathInfo根本不是外层NovaRequest实例自身的属性,它属于NovaRequest内部嵌套持有、名为request的底层Illuminate\Http\Request实例,在外层对象上直接访问同名属性自然取不到值。
正确实现方式
不要尝试直接读取对象的非公开属性,直接调用请求类封装好的公开方法即可:
- 如果你只需要获取当前请求路径做字符串判断,用Laravel自带的
path()方法最简便:// 获取当前请求的路径(不带域名、查询参数) $currentPath = $request->path(); // 判断路径是否包含post-tags $hasPostTags = str_contains($currentPath, 'post-tags'); - 如果你确实需要获取原始的
pathInfo值,调用公开的getPathInfo()方法即可,该方法就是专门用来返回内部受保护的pathInfo属性值的:$pathInfo = $request->getPathInfo();
内容的提问来源于stack exchange,提问作者Nelb
相关产品推荐
相关产品推荐

