narcisonunez / laravel-actionable-model
允许Laravel模型执行或接收操作
1.3.2
2021-04-10 15:02 UTC
Requires
- php: ^8.0
- illuminate/contracts: ^8.0
- spatie/laravel-package-tools: ^1.4.3
Requires (Dev)
- orchestra/testbench: ^6.13
- phpunit/phpunit: ^9.3
- spatie/laravel-ray: ^1.9
- vimeo/psalm: ^4.4
README
允许模型执行或接收操作。
安装
您可以通过composer安装此包
composer require narcisonunez/laravel-actionable-model
您可以使用以下命令发布和运行迁移
php artisan vendor:publish --provider="Narcisonunez\LaravelActionableModel\LaravelActionableModelServiceProvider" --tag="actionable-model-migrations" php artisan migrate
基本设置
注册您的操作
在您的 AppServiceProvider
中添加您的操作
use Narcisonunez\LaravelActionableModel\Facades\ActionableActionTypes; use App\ActionTypes\KudosActionType; ActionableActionTypes::register([ 'like', 'kudos' => KudosActionType::class, 'celebrate' ]);
您可以通过扩展 ActionableTypeRecord
类来自定义更多逻辑到您的记录。
例如,实现一个 icon
方法来获取特定操作类型的图标。现在,任何 kudos
操作都将有一个名为 icon
的方法。
您的操作将被用作动态方法调用。请参阅以下内容。
创建一个新的操作类型(可选)
php artisan actionable:type LikeActionType
为您的模型添加别名(可选)
在您的 AppServiceProvider
中添加您的别名
use App\Models\Cause; use App\Models\User; use Narcisonunez\LaravelActionableModel\Facades\ActionableModelAliases; ActionableModelAliases::register([ User::class => 'user', Cause::class => 'cause' ]);
在数据库中存储别名可以防止在将模型移动到其他目录时丢失引用。
更新现有模型引用以使用新别名
如果您的数据库中已经有数据,在添加别名后,您可以运行
php artisan actionable:update-aliases // Update all the records
如果您只想更新特定值
php artisan actionable:update-aliases --from="App\\User" --to="App\\Models\\User"
更新所有现有记录。
特质
需要执行所需操作的功能模型
// Imports class User extends Authenticatable { use ActionableModel; use CanPerformActions; ... }
可以接收操作的功能模型必须实现 CanBeActionable
... use Narcisonunez\LaravelActionableModel\Traits\ActionableModel; class Cause extends Model implements CanBeActionable { use ActionableModel; ... }
基本用法
执行操作
// You will use your actions as methods call. $user->performActionOn($cause)->like(); $user->performActionOn($cause)->kudos(); $user->performActionOn($cause)->celebrate();
检查操作是否已执行
// returns False or an ActionableTypeRecord $user->hasPerformedAction('like')->on($cause);
切换操作
// remove if exists the action, otherwise creates a new like $user->performActionOn($cause)->toggle('like'); // OR // toggleACTIONTYPE $user->performActionOn($cause)->toggleLike(); $user->performActionOn($cause)->toggleKudos(); $user->performActionOn($cause)->toggleCelebrate();
手动删除操作(见切换部分)
if ($action = $user->hasPerformedAction('like')->on($cause) ) { $action->delete(); }
获取所有操作
$user->actions; // To help you out filtering your actions. You can use the actionsFilter method $user->actionsFilter()->get(); $user->actionsFilter()->latest(10); $user->actionsFilter()->given()->get(); $user->actionsFilter()->received()->get(); $user->actionsFilter()->ofType('like')->get(); $cause->actionsFilter()->by($user)->ofType('like')->get(); $cause->actionsFilter()->by($user)->ofType('like')->count();
- 可用方法 -
操作记录
上述方法将返回一个 ActionableRecord
集合。
要访问所有者或可操作模型,您可以这样做
$actionRecord = $user->actionsFilter()->ofType('like')->get()->first(); $actionRecord->owner; // The model that performed the action $actionRecord->actionable; // The model that received the action $actionRecord->action; // Action that was performed. ex. like, kudos, celebrate, etc. $actionRecord->type; // An alias to action
💖 支持开发
您喜欢这个项目吗?通过捐赠来支持它
- PayPal: 捐赠
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。