langleyfoxall/helpers-laravel

一组实用的类,帮助简化Laravel应用程序的开发

v3.0.0 2024-07-01 08:18 UTC

README

Packagist

一个包含特定于Laravel的辅助类的存储库,以帮助标准化工作。API辅助工具、转换器等。

安装

可以使用Composer轻松安装Langley Foxall Helpers Laravel包。只需从项目的根目录运行以下命令。

composer require langleyfoxall/helpers-laravel

如果您以前从未使用过Composer依赖管理器,请访问Composer网站获取有关如何开始的更多信息。

辅助工具

模型

模型辅助工具 提供了一些有用的函数,用于处理 Eloquent模型

方法

所有方法都可以静态调用。

all

获取所有模型的 集合

示例用法
$collection_of_models = Models::all()
utf8EncodeModel

将单个模型的属性值编码为 UTF-8,并返回模型。

示例用法
$encoded_user = Models::utf8EncodeModels($user)
utf8EncodeModels

将多个模型的属性值编码为 UTF-8,并返回模型集合。

示例用法
$collection_of_encoded_users = Models::utf8EncodeModels($users)
getColumns

获取给定模型的数据库列的 数组

示例用法
$columns = Models::getColumns($user)
getNextId

获取模型的下一个 自增ID

示例用法
$next_id = Models::getNextId($user)
areRelated

检查一定数量的模型是否相互关联。

示例用法

如果传递了 模型 的实例,则 areRelated 将尝试从模型中获取 复数单数 方法,然后可以由序列中的前一个模型使用这些方法以确认它们是否相关。如果传递了一个数组,则期望第一个元素是一个 模型 的实例,第二个是一个表示关系方法的字符串

还提供了一个 NotRelatedException,可以在应用程序中使用。

$related = Models::areRelated($user, $post, [$comment, 'comments'])
randomByWeightedValue

接受一个 Model 集合并根据加权列返回一个。它还可以接受一个最大容量值以模拟更高的几率。

请注意,当传递一个 maxCap 时,如果模型列表中的所有项都没有命中,则应传递一个期望的返回值。

示例用法
$prizes = Prizes::all();
$selectedPrize = Models::randomByWeightedValue($models, 'chance');
//returns a prize as if the 'chance' column related to {$chance}/10,000,000 - if none are hit it will return null.
$selectedPrize = Models::randomByWeightedValue('App\Models\Prize', 'chance', 10000000, null);

IsRelatedTo

《IsRelatedTo 辅助器》是一个特性,允许快速轻松地访问areRelated方法,该方法位于Models 辅助器中。

方法

isRelatedTo

检查单个模型是否与父模型相关。

示例用法
class User extends Model {
    use IsRelatedTo;
}

$related = $user->isRelatedTo($post)

枚举

《Enum 辅助器》是一个特性,提供了处理枚举类时的辅助函数。

方法

all

返回枚举类的所有值的数组。

示例用法
class UserType
{
    use \LangleyFoxall\Helpers\Traits\Enum;

    const ADMIN = 'admin';
    const USER = 'user';
}

class User extends Eloquent
{
    public function getValidTypes()
    {
        return UserType::all();
    }
}
valid

检查提供的值是否是枚举类的有效值。

示例用法
class UserType
{
    use \LangleyFoxall\Helpers\Traits\Enum;

    const ADMIN = 'admin';
    const USER = 'user';
}

class User extends Eloquent
{
    public function setTypeAttribute(string $type)
    {
        if (!UserType::valid($type)) {
            throw new InvalidUserType;
        }

        $this->type = $type;
    }
}

ApiResponse

《ApiResponse 辅助器》标准化API响应。始终包含相同的字段

《ApiResponse 辅助器》还实现了ArrayAccess,可以用来轻松转换data。示例用法可以在这里找到。

在构建响应并在Controller中返回它之前,您必须调用json

方法

success

创建一个成功的响应实例。

示例用法

没有任何参数是必需的。

$api_response = ApiResponse::success($data, $meta, $status)
error

创建一个不成功的响应实例。

示例用法

没有任何参数是必需的。

$api_response = ApiResponse::error($errors, $status)
data

设置要返回的数据。

示例用法

没有任何参数是必需的。

$api_response->data($data)
meta

设置要返回的元数据。

示例用法

没有任何参数是必需的。

$api_response->meta($meta)
status

设置响应状态码。

示例用法
$api_response->status($status)
json

获取JSON响应对象

示例用法
$json_response = $api_response->json()
cache

将当前的ApiResponse数据缓存起来以供后续请求使用。默认情况下,如果缓存中已经存在数据,则不会覆盖数据。使用forceOverwrite可以覆盖数据,默认为false。cache必须在设置data之后调用。

示例用法

lifespan接受以分钟为单位的整数值或Carbon时间,表示缓存将在何时清除。cache必须是一个实例化的ResponseCache

ApiResponse::success($data)->cache(1, $cache)->json();

响应

当API端点由于某种原因使用与Web URI相同的Controller方法时,应仅使用《Response 辅助器》。此辅助器将检查请求是否期望JSON,并返回正确的响应。

方法

以下所有方法都不能静态调用。实例化新的Response实例时需要一个Request对象。

success

创建一个成功的响应。

示例用法

没有任何参数是必需的。

$response = (new Response($request)->success($message, $data, $meta, $status)
error

创建一个不成功的响应。

示例用法

没有任何参数是必需的。

$response = (new Response($request)->success($message, $status)
type

设置响应类型。虽然错误和成功不是严格检查的,但如果不是错误,则默认为成功。

示例用法
$response = (new Response($request)->success($type)
message

设置在发生错误或触发back时显示的消息。

示例用法
$response = (new Response($request)->message($message)
data

将返回的数据设置为一个成功的ApiResponse

示例用法

没有任何参数是必需的。

$response = (new Response($request)->data($data)
meta

将返回的元数据设置为一个成功的ApiResponse

示例用法

没有任何参数是必需的。

$response = (new Response($request)->meta($meta)
status

将返回的状态设置为一个ApiResponse。如果在其之前调用successerror,则会重写。

示例用法
$response = (new Response($request)->status($status)
redirect

设置要调用的而不是返回的redirect URI。

示例用法

没有任何参数是必需的。

$response = (new Response($request)->redirect($uri)
end

返回预期的响应。

示例用法
$expected_response = (new Response($request)->end()

ResponseCache

ResponseCache助手简化了根据不同的请求参数和用户账户缓存API响应。根据请求路由、方法、参数和用户生成独特的缓存。

方法

以下所有方法都不能静态调用。

hasData

返回当前缓存是否有数据。

示例用法
if($cache->hasData()){...
getData

返回当前缓存中的数据,如果为空则返回null

示例用法
$data = $cache->getData();
cacheData

将数据保存到缓存中。任何当前缓存中的数据都将被覆盖/

示例用法

data可以是任何可序列化的数据,lifespan可以是分钟,也可以是一个Integer或一个Carbon时间,表示缓存将在该时间过期。

$cache->cacheData(["Hello" => "World"], Carbon:now()->addSeconds(4404));
getKey

返回基于请求路径、方法、参数和用户生成的缓存唯一键。

示例用法
$key = $cache->getKey();
clear

清除给定缓存的缓存数据。

示例用法
$cache->clear();

与ApiResponse一起使用

可以使用cache函数自动从ApiResponse创建缓存。如果缓存中不包含数据,它将只缓存新数据。请参阅此处文档

示例用法
$cache = new ResponseCache($request, false);

if($cache->hasData()){
    $data = $cache->getData();
}else{
    $data = computationallyExpensiveFunction();
}

return ApiResponse::success($data)->cache(1, $cache)->json();

IdentifiedByUUID

IdentifiedByUUID特质允许您轻松使用V4 UUID而不是递增主键。

示例用法

更改您的迁移以允许使用UUID。

public function up()
{
    Schema::create('demos', function (Blueprint $table) {
        $table->uuid('id')->primary();
        $table->timestamps();
    });
}

使用特质。

class Demo extends Model
{
    use IdentifiedByUUID;
}

现在当模型保存时,它将自动填充一个V4 UUID。