1 回答
TA贡献1772条经验 获得超8个赞
据我所知,Laravel 中没有“标准”方法可以完成上面的操作,如果输入缺失,则为输入分配默认值,并控制使用map
.
我相信,最接近您正在寻找的东西是批量分配。
有许多不同的方法和模式来处理这些类型的请求,您的方法对我来说似乎很好。我个人使用Form Requests + DTO,因为代码本身文档记录得很好。举个例子:
控制器:
class UsersController extends Controller
{
...
public function store(CreateUserRequest $request)
{
$user = User::create($request->toCommand());
// Return response however you like
}
...
}
表单请求
class CreateUserRequest extends FormRequest
{
...
public function rules()
{
// Validate all the data here
}
...
public function toCommand() : CreateUserCommand
{
return new CreateUserCommand([
'name' => $this->input('name'),
'birthdate' => Carbon::parse($this->input('birthdate')),
'role' => $this->input('role'),
'gender' => $this->input('gender'),
...
]);
}
}
命令DTO
class CreateUserCommand extends DataTransferObject
{
/** @var string */
public $name;
/** @var \Carbon\Carbon */
public $birthdate;
/** @var string */
public $role = 'employee'; // Sets default to employee
/** @var null|string */
public $gender; // Not required
}
class User extends Model
{
...
protected $fillable = [
'name',
'birthdate',
'role',
'gender',
];
...
public static function create(CreateUserCommand $command)
{
// Whatever logic you need to create a user
return parent::create($command->toArray());
}
}
这是一种相当“Laravel 方式”的做事方式,代码本身向需要使用它的任何其他人(以及稍后的你:D)传达了大量信息。
- 1 回答
- 0 关注
- 134 浏览
添加回答
举报