Laravel 8配置Route resource资源路由出现数组转字符串错误
问题解决
你遇到的Array to string conversion报错,以及后续隐含的逻辑错误共有三处,修复方式如下:
- 第一处:Resource路由定义格式错误
Laravel 资源路由的第二个参数直接传入控制器类名即可,不需要包裹数组。你写的Route::resource('cars', [CarController::class]);多了一层数组,Laravel 解析时尝试把数组转为字符串就触发了该报错,正确写法为:
Route::resource('cars', CarController::class);
第二处:控制器
create和store方法逻辑写反
Laravel 资源路由默认的方法对应关系为:- GET 请求
/cars/create→ 触发create方法,作用是渲染新增表单页面 - POST 请求
/cars→ 触发store方法,作用是接收表单提交的数据存入数据库
你现在把表单渲染逻辑写在了store里,数据保存逻辑写在了create里,路由生效后会出现新增页面404、提交表单逻辑错位的问题,把两个方法的代码互换即可。
- GET 请求
第三处:验证规则
exists写法错误exists验证规则的标准格式是exists:关联表名,关联表字段名,你写的'exists:garage_id'不符合规范。假设车库表名为garages、主键字段为id,正确的验证规则写法为:
'garage_id' => 'required|exists:garages,id'
注意多个验证规则之间用竖线分隔,不要拆成两个独立的数组元素。
内容的提问来源于stack exchange,提问作者Swanito
相关产品推荐
相关产品推荐

