georgehanson / laravel-persisters
用于创建持久化类的laravel包
v1.1
2018-11-23 11:30 UTC
Requires
- illuminate/support: ^5.7|^5.6|^5.5|^5.4
Requires (Dev)
- fzaninotto/faker: ^1.7
- mockery/mockery: ^1.0
- orchestra/testbench: ^3.5
- phpunit/phpunit: ^6.4
- squizlabs/php_codesniffer: ^3.1
This package is not auto-updated.
Last update: 2024-09-29 04:49:26 UTC
README
此包旨在简化在laravel项目中创建持久化类的过程。持久化的想法是抽象数据存储过程。
安装
要安装此包,只需将以下内容添加到您的composer.json文件中
require: { ... "georgehanson/laravel-persisters": "^1.0" ... }
使用方法
创建持久化类
要创建持久化类,您只需创建一个新的类,让它继承基本持久化类并实现抽象方法。以下是一个示例
use GeorgeHanson\LaravelPersisters\BasePersister; class MyPersister extends BasePersister { /** * Create a new Model * * @param array $data * @return Model */ protected function create(array $data) { // Store a new resource here } /** * Update the given Model * * @param array $data * @param Model $model * @return Model */ protected function update(array $data, Model $model) { // Update the given model here } }
为了使用您的新持久化类,您可以简单地实例化该类并调用持久化方法。以下是一个示例
$data = [ 'first_name' => 'John', 'last_name' => 'Doe' ]; $persister = new MyPersister(); $persister->persist($data);
基本持久化类将自动确定您是在创建记录还是更新记录。
创建记录
要使用持久化类创建新记录,只需调用持久化方法并传递要保存的数据。持久化方法可以接受数据数组或类(如Collection、Request),该类实现了Arrayable
接口。以下是从请求创建资源的示例。
use Illuminate\Http\Request; use App\Persisters\MyPersister; class MyController extends Controller { public function store(Request $request, MyPersister $persister) { $record = $persister->persist($request); } }
这将触发您创建的持久化类中的create
方法。在这里,您可以处理创建资源所需的任何逻辑。
更新记录
更新记录与创建记录一样简单。唯一的区别是您必须向persist
方法传递第二个参数,即您想要更新的模型。以下是如何从请求更新记录的示例。
use Illuminate\Http\Request; use App\Persisters\MyPersister; use App\User; class MyController extends Controller { public function update($id, Request $request, MyPersister $persister) { $user = User::find($id); // Update the user with the given data $record = $persister->persist($request, $user); } }
过滤数据
我们无法确定请求中接收到的数据是否总是我们想要持久化的数据。例如,当我们保存记录时,我们不想存储Laravel传递的用于CSRF保护的_token
。我们可以通过在持久化器中指定键来实现这一点。这样,它将过滤传递的数据,并只返回存在该键的数据。但是,如果在键数组中指定了键,而它不在传递给持久化器的数据中,则该键的值将被设置为null
。以下是一个过滤数据的示例
use GeorgeHanson\LaravelPersisters\BasePersister; class MyPersister extends BasePersister { /** * The data to filter * * @type array */ public $keys = [ "first_name", "last_name" ]; /** * Create a new Model * * @param array $data * @return Model */ protected function create(array $data) { // No matter what is passed to us, $data will only contain "first_name" and "last_name" } /** * Update the given Model * * @param array $data * @param Model $model * @return Model */ protected function update(array $data, Model $model) { // Update the given model here } }
或者,如果您没有指定任何键,它将返回所有数据作为数组。