binarytorch/model-updater

此包已被弃用,不再维护。作者建议使用https://github.com/laimoon-company/laravel-model-updater包代替。

Laravel Model Updater

v1.0.1 2020-01-02 10:43 UTC

This package is auto-updated.

Last update: 2020-01-02 10:44:18 UTC


README

image

Laravel Model Updater

概览

ModelUpdater是一个包,它帮助您定义业务逻辑和验证,通过简单的控制器操作和请求处理程序来更新整个模型字段或其中的一些字段。

让我们用一个简单的例子来说明这个包的目的

假设您有一个用户模型,您有一个API端点来更新数据库中用户字段,而API消费者可以分别或一次性更新任何字段,问题是每个字段在将更新值存储到数据库之前都需要自己的逻辑。

当然,有很多不同的方法来处理这种情况,让我们考虑这个简单且常见的方法

旧方法

如您所见,仅包含两个字段的控制器方法变成了一个大方法,想象一下如果您有20+个字段!

class UserController extends Controller
{
    public function update(Request $request)
    {
        $user = auth()->user();

        // now you check for every field you allowed to update and perform the needed logic.
        if($request->has('name')) {
            // needed logic and validation
            ...
            ..
            $user->name = $request->name
        }

        if($request->has('email')) {
            // needed logic and validation
            ...
            ..
            $user->email = $request->email
        }

        // update/save the model
        $user->save();

        // return a response
        return response()->json();
    }
}

新方法(更简单)

//App/Http/Controllers
use App\Updaters\UserUpdater;

class UserController extends Controller
{
    public function store(UserUpdater $updates)
    {
        auth()->user()->fillUpdates($updates);
    }
}

// App/Updaters
class UserUpdater extends Updater
{
    /**
     * Allowed fields to be updated.
     */
    protected $fields = ['name', 'email'];

    protected function name($value)
    {
        $this->request->validate(['name' => 'required|string|min:6']);

        $this->model->name = $value;
    }
    
    protected function email($value)
    {
        $this->request->validate(['email' => 'required|string|min:6']);

        $this->model->email = $value;
    }
}

安装与使用

  1. 通过composer安装此包

此包仅支持Laravel 5.5+

composer require laimoon/model-updater
  1. Updatable特质添加到您希望使用的模型中
use Laimoon\UpdatableModel\Traits\Updateable;

class User extends Authenticatable
{
    use Updateable;
}
  1. 创建一个新的模型更新器
php artisan make:updater User

此命令将在app目录下生成一个新目录,目录名为Updaters,并在其中创建一个名为(以本例为例)UserUpdater.php的文件。

  1. 在控制器中使用
use App\Updaters\UserUpdater;

class UserController extends Controller
{
    public function store(UserUpdater $updates)
    {
        auth()->user()->fillUpdates($updates);
        
        return response()->json();
    }
}

贡献

有关详细信息,请参阅CONTRIBUTING

安全性

如果您发现任何安全问题,请通过电子邮件saleem@laimoon.com报告,而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件