laimoon/model-updater

此包已被弃用且不再维护。未建议替代包。

Laravel 模型更新器

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

This package is auto-updated.

Last update: 2024-01-29 03:34:39 UTC


README

概述

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 以获取详细信息。

致谢

许可证

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