我创建新的表单请求,并将其用于所有CRUD操作
并用于$this->getMethod();
检查请求之间的差异
然后我面临逻辑问题
在update方法中是否应要求存储方法中要求的所有字段?
=>这里的问题是API的使用者是否应该发送所有键对象以更新特定的键
如果不应该,并且从API发送的键名称与数据库表列名称不同
=>我不能使用,update($request()->all());
因为该键与列名不同,所以我需要在所有请求键上循环以忽略具有空值的键-也可以通过多次检查来完成-
那么,请问那是什么最佳实践?
欢迎使用Stackoverflow。
laravel中有很多验证方法,
我更喜欢不要在控制器中编写验证并将其写入单独的请求中,并使用该请求对象作为参数。
假设我们具有用户模型,并且在控制器的添加和编辑方法中名称是必需的并且是唯一的,您可以如下所述简单地使用UserRequest对象。
创建请求类
php artisan make:request UserRequest
class UserRequeset extends Request
{
/**
* Get the validation rules that apply to the request.
* @return array
*/
public function rules()
{
$id = request('id') ?: 'NULL'; //To identify if request is for add or edit just take autoincremented id parameter form request.
return [
'name' =>'required|unique:users,name,'.$id
];
// you can also customize your validation for different methods as below
switch ($this->method()){
case 'POST':
return [
// validation for post method
];
break;
case 'PUT':
return [
// validation for put method
];
break;
default:
return [];
break;
}
}
public function messages()
{
return [
"name.required" => "User name is required",
"name.unique" => "User name should be unique"
// or you can customize this using language
"name.required" => __("user.required_message"),
"name.unique" => __("user.unique_message")
];
}
}
在UserController中
use App\Http\Requests\UserRequest;
Class UserController extends Controller {
public function add(UserRequest $request)
{
//Enter your code just after validation part no need of any validation code here
}
public function update(UserRequest $request)
{
//Enter your update code just after validation part no need of any validation code here
}
}
希望对您有所帮助。
好的问题在这里,如果我有姓名和电话,并且两者都不允许在数据库中为null,如果PUT,POST(插入)中的POST部分都需要,并且在更新中,用户可以更改姓名或电话,或者两者都更改,所以如果我应该在POST和PUT中为2个字段输入必填项??
甚至用户都想更新其中之一,或者用户应该发送完整的对象(无论是否更新)
可能是的,
required
这两种方法都应该您也可以直接执行第一步,而无需使用方法检查,这两种方法在两种情况下均相同。