insomnicles / laraexpress
一个用于反应、评分、表情符号和其他自定义表达类型的Laravel包
dev-main
2023-08-31 14:34 UTC
Requires
- laravel/framework: ^10.10
Requires (Dev)
- phpunit/phpunit: ^10.1
This package is auto-updated.
Last update: 2024-09-30 01:43:31 UTC
README
在Laravel中处理表达、反应和评分的简单方法。
特性
-
术语
- ExpressionType: 表达类型,反应或评分(例如1到5星,喜欢/不喜欢)
- ExpressableModel: 可以有表达式的Laravel模型类型(例如'App\Models\Image')
- Expressable Id: 具体ExpressableModel类型的id(例如id=4)
- Expression: 表达值(例如3星)
-
表达式特性
- 具有离散或渐变范围的几个内置表达式类型
- 可以添加自定义表达式
- 可表达模型(可以表达表达式的模型)必须在数据库中预先定义
- 可表达模型可以有多个表达式类型
- 例如,图像模型可以有两个表达式类型:喜欢/不喜欢和5星评分)
- 每个可表达模型-表达式类型对只有一个用户表达式
- 只有认证用户可以存储表达式
- 用户仅被授权更新或删除自己的表达式
-
预定义表达式类型
- 鼓掌
- 喜欢/不喜欢
- 热 - 冷离散
- 热 - 冷渐变
- 认知:有趣、清晰、困惑
- 情感:快乐、悲伤、超级快乐
- 五星
- 米其林星级:1、2或3星
- 投票:赞成、反对、弃权
- ELO象棋评分:1200或以上
安装
composer require insomnicles/laraexpress
php artisan vendor:publish
用法
- 要定义哪些模型可以有什么表达类型的表达式,将以下内容添加到数据库seeder中
ExpressableModel::create([
'expressable_type' => 'App\Models\Image',
'expression_type_id' => Xpress::FIVESTAR ]);
ExpressableModel::create([
'expressable_type' => 'App\Models\Image',
'expression_type_id' => Xpress::EMOTIVE ]);
- 要创建表达式/评分,使用Express::express Facade
- Express::express($object, $type_id, $expression)
$expr = Express::express($image, Xpress::FIVESTAR, Express::TWOSTARS);
$expr = Express::express($product, Xpress::FIVESTAR, Express::FIVESTARS);
$expr = Express::express($restaurant, Xpress::MICHELINSTAR, Express::ONEMICHELINSTARS);
$expr = Express::express($image, Xpress::LIKEDISLIKE, Express::LIKE);
$expr = Express::express($image, Xpress::HOTCOLDGRADIENT, 2.563);
$expr = Express::express($image, Xpress::EMOTIVE, Express::HAPPY);
$expr = Express::express($image, Xpress::EMOTIVE, Express::MAD);
$expr = Express::express($image, Xpress::COGNITIVE, Express::CONFUSING);
$expr = Express::express($image, Xpress::COGNITIVE, Express::INTERESTING);
$expr = Express::express($chessPlayer, Xpress::ELO, Express::GRANDMASTER);
$expr = Express::express($chessPlayer, Xpress::ELO, 2832);
$expr = Express::express($bill, Xpress::VOTE, Express::INFAVOR);
- 要检索表达式值和统计数据,使用Express::stats Facade
- Express::stats(String $expressable_type, int $expressable_id, int $expression_type_id)
$objectStats = Express::stats(5, 1, 6);
创建自定义类型
- 要创建自定义表达式类型,请执行以下操作
- 添加新的自定义表达式类型
- 通过ExpressionTypes Seeder在DatabaseSeeder.php中添加记录到ExpressionType Model(或在表中插入记录)
- 示例:表示爱情的自定义类型
ExpressionType::create([ 'id' => 11, 'description' => 'Love Rating from 1 to 5', 'range_type' => 'int', 'min' => 1, 'max' => 5, 'icons' => json_encode([ 1 => 'icons/smallheart.png', 3 => 'icons/heart.png', 5 => 'icons/bigheart.png']), 'labels' => json_encode([ 1 => 'little love', 3 => 'love', 5 => 'looove' ])]);
- 添加用户可以对哪些模型进行自定义类型表达式
- 通过ExpressableModelSeeder在DatabaseSeeder中添加记录到ExpressableModel
- 示例:用户可以对用户和图像模型留下爱情表达
ExpressableModel::create([ 'id' => 4, 'expressable_type' => 'App\Models\User', 'expression_type_id' => 11 ]); ExpressableModel::create([ 'id' => 4, 'expressable_type' => 'App\Models\Image', 'expression_type_id' => 11 ]);
- 添加Facade调用常量
- 将常量、自定义类型名称和表达式值添加到Xpress.php
const LOVERTG = 11; // corresponds to id in expression_type_table const LTLLOVE = 1; const LOVE = 3; const LOOOVE = 5;
- 使用Facades,如上所示 $expression = Express::express($image, Express::LOVERTG, Express::HUGELUV); $expression = Express::express($user, Express::LOVERTG, Express::LUV);
- 添加新的自定义表达式类型
预定义表达式类型定义示例
-
米其林星级
- range_type: int
- min: 1
- max: 3
- names: [ 1 => '1 Michelin Star', 2 => '2 Michelin Stars', 3 => '3 Michelin Stars' ]
- icons: [ 1 => '1-star.png', 2 => '2-stars.png', 3 => '3-stars.png' ]
-
投票
- range_type: int
- min: 1
- max: 2
- names: [ 1 => 'In Favor', 2 => 'Against' ]
- icons: null
-
热-冷
- range_type: float
- min: 1
- max: 5
- names: [ 1 => 'Freezing', 2 => 'Cold', 3 => 'Medium', 4 => 'Warm', 5 => 'Hot' ]
- icons: [ 1 => 'freezing.png', 5 => 'hot.png' ]
设计选择
- 独立于Laravel应用程序的其他部分
- i) 仅使用外观调用(不使用eloquent)
- ii) 使用
- 如果应用程序是独立的Laravel项目的一部分,则仅使用一个外观调用
- 如果应用程序是微服务,则仅使用其他路由
- PRO
- 在基本的CRUD案例中,添加、删除和更新表达式更为简单
- 表达式版本更新不会影响应用程序的其他部分
- 可以在使用不同语言和框架的架构中创建独立的表达式微服务
- 与关系型或NoSQL数据库的集成更为简单:无需更改外观
- CON:无法与eloquent模型和查询集成
- 使得查询表达式变得更加繁琐(两步/三步过程)并可能更慢
许可证
Laravel框架是开源软件,根据MIT许可证授权。