猿问

Laravel 中是否有任何辅助函数可以将表单数据分配到模型中?

我知道 laravel 中有一个resource功能,据我所知,resource类似于jsontomodel及其相反的功能。


因此,当我处理表单数据时,当前使用以下自定义帮助器方法。


public function assignFormdata(Request $request, $model, $map = [])

{

    foreach($map as $input=>$field) {

        // $field is model's param. $input is form data key.

        $model->$field = $request->input($input) ?? $field;

    }

    return $model;

}

..这个方法已经存在于laravel中吗?或者类似的东西..?


冉冉说
浏览 135回答 1
1回答

料青山看我应如是

据我所知,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'),            ...        ]);    }}命令DTOclass 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)传达了大量信息。
随时随地看视频慕课网APP
我要回答