为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
冉冉说 2023-08-26 17:29:29
我知道 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中吗?或者类似的东西..?
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

据我所知,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)传达了大量信息。


查看完整回答
反对 回复 2023-08-26
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信