验证代码:
public function rules()
{
return [
'money' => 'required|min:1',
];
}
public function store(NewBonusTaskRequest $request)
{
dd($request->all());
}
居然可以把请求信息都输出了,而没有返回错误信息
在生成的Resource文件的时候,toArray方法中,默认有一行代码:
$data = parent::toArray($request);
foreach($data as $key => &$value) {
$key = $this->fieldsMap($key);
}
return [
'code'=>200,
'data' => $data
];
这行代码,拿到的就是查询结果的数据,而且是可变的
如果需要把每个字段的名字都换成其他的话,可能还需要定义一个方法:
public function fieldsMap($key)
{
$fields = [
'mobile' => 'phone',
'username' => 'name',
];
return isset($fields[$key]) ? $fields[$key] : $key;
}
或许可以这样实现
老师,请问,加判断是加在哪儿?是Controller还是Resource中?
感觉这个Api Resource
有点儿鸡肋,不够灵活
这个问题也是困惑我好久的,现在又回到laravel的这个项目上了,也就又回到了这个问题上
查了很多,都没找到涉及该问题的内容
@JellyBool 老师,上面那个问题解决了,又有个新的问题,就是返回的数据格式的问题:
{
"message": "The given data was invalid.",
"errors": {
"mobile": [
"请检查手机号码是否正确"
],
"email": [
"请填写邮箱"
]
}
}
这是验证没通过时,返回的错误信息。怎么改成实际需要格式呢?
一般都会有一个错误码的那种格式
改格式这个,真的是不知道如何用英文搜了
@JellyBool 如果是在API开发中使用表单请求类这种方式来做验证,验证不通过的时候,会直接跳转到首页;
在网上找了一个解决方案:https://laracasts.com/discuss/channels/laravel/form-request-to-validate-in-my-api-rest Illuminate\Foundation\Http\FormRequest
这个类中加了一个判断,大概是 78 行之后:
if (method_exists($this, 'response')) {
return $this->response($validator);
}
然后在表单请求类中,加一个response方法
public function response($validator)
{
return response()->json($validator->errors());
}
直接输出错误信息
这样改了之后有两个困惑,
1、改了框架的代码,以后更新会有影响;
2、返回的错误信息没有加API返回信息的格式,不清楚 表单请求类 中,是否也可以使用API Resource
@JellyBool StoreArticleRequest $request
如果在API中这么使用时,验证不过会跳转到首页,这个有没有办法,在验证不过的时候,返回错误信息
有点儿担心切换成本高,不敢下手
之前在这里学习的时候,跟着老师,装了valet,但是没有redis、没有MySQL,要一个一个装
MySQL当时就装好了,但是看了redis的,即使是使用brew install redis来安装,也还要做链接什么的,挺麻烦的,就搜了一下,怎么给valet安装redis,没找到满意的安装方式,结果就发现了这个
https://github.com/weprovide/valet-plus#installation
感觉还挺不错的,该有的全有了,想安装试下