slexx / laravel-actions
为laravel提供操作
v1.3.3
2020-01-24 21:33 UTC
Requires
- ext-json: *
- laravel/framework: >=5.7
- nwidart/laravel-modules: ^6.2
README
用法
问题
大多数应用程序都有多个入口点。例如,用于创建用户的表单、用于移动应用的API,甚至可能有用于创建用户的命令。
然后就会出现代码重复的问题。
class UserController { public function create(CreateUserRequest $request) { $user = new User; $user->email = $request->email; $user->password = bcrypt($request->password); $user->save(); return redirect('users/' . $user->id); } } class UserApiController { public function create(CreateUserRequest $request) { $user = new User; $user->email = $request->email; $user->password = bcrypt($request->password); $user->save(); return new UserResponse($user); } }
解决方案
最近我通过阅读一篇关于如何在medium的文章,发现了一个优雅的解决方案。
通过添加新类来消除重复
class UserCreateAction { public function execute(CreateUserRequest $request): User { $user = new User; $user->email = $request->email; $user->password = bcrypt($request->password); $user->save(); return $user; } } class UserController { public function create(CreateUserRequest $request, CreateUserAction $action) { return redirect('users/' . $action->execute($request)->id); } } class UserApiController { public function create(CreateUserRequest $request) { return new UserResponse($action->execute($request)); } }
那么这个包具体做什么呢?
它添加了一个不可替代的命令make:action
!
php artisan make:action Users/CreateUserAction
这将生成以下代码
<?php namespace App\Actions\Users; use App\User; use Slexx\LaravelActions\Action; class CreateUserAction extends Action { /** * @param array $data * @return User */ public function execute(array $data) { $user = User::create($data); return $user; } }
安装
您可以通过composer安装此包
composer require slexx/laravel-actions
更新composer后,将服务提供者添加到config/app.php
中的providers
数组中
Slexx\LaravelActions\ActionsServiceProvider::class,