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 關注
- 165 瀏覽
添加回答
舉報