Laravel报错:Attempt to read property "titulo" on string 求助
解决Laravel中「Attempt to read property "titulo" on string」错误
问题根源
你遇到的错误是因为视图中使用的$nombrePregunta不是Preguntas模型实例,而是URL里的slug字符串。直接对字符串调用->titulo这类属性自然会触发错误。
分步解决方案
1. 给控制器方法参数声明模型类型
在paginaControlador的gestionPregunta方法中,必须给参数指定Preguntas模型类型,让Laravel自动完成路由模型绑定:
use App\Models\Preguntas; public function gestionPregunta(Preguntas $nombrePregunta) { // 此时$nombrePregunta已经是查询到的模型实例 return view('preguntas', compact('nombrePregunta')); }
2. 确认路由配置有效性
你的路由写法/preguntas/{nombrePregunta:slug}是正确的,但要确保:
- Preguntas模型对应的数据库表存在
slug字段 - 路由指向的控制器类和方法名称完全匹配
3. 配置模型路由键(按需)
如果Preguntas模型默认不是用slug作为路由绑定的匹配字段,需要在模型中显式设置:
class Preguntas extends Model { // ...其他模型代码 public function getRouteKeyName() { return 'slug'; } }
4. 排查视图传参逻辑
确认控制器中没有对$nombrePregunta做额外的字符串转换操作,直接将模型实例传递给视图即可。
验证方式
在控制器方法中添加dd($nombrePregunta),如果输出是字符串,说明路由模型绑定未生效;如果是Preguntas对象,就可以正常访问titulo、categorias->nombre等属性。
内容的提问来源于stack exchange,提问作者Luz Serrano Díaz
相关产品推荐
相关产品推荐

