noisystate/skipped-attributes

此包最新版本(dev-master)没有可用的许可信息。

一个简单的包,以优雅的方式定义具有可选属性的数组

dev-master 2023-10-25 16:15 UTC

This package is not auto-updated.

Last update: 2024-09-26 04:07:49 UTC


README

安装

composer require noisystate/skipped-attributes

基本用法

$data = unskipped_attributes([
    'one' => 1,
    'two' => 2,
    'three' => $someCondition ? 3 : skip_attribute(),
]);
// If $someCondition is true
// $data contains ['one' => 1, 'two' => 2, 'three' => 3]
// Otherwise
// $data contains ['one' => 1, 'two' => 2]

为何使用它

当你构建定义数组并条件性地添加属性时,这种情况经常发生。这导致使用许多if条件,简化定义以避免混淆代码读者,并强制他们走完所有这些条件,即使他们对此级细节不感兴趣。

这个超级简单的库允许你以简短简单的格式定义具有条件添加的属性(键值对)的数组,这样代码读者就可以对数组和其中的属性有一个概述,而无需遍历许多if条件。

示例用例

这是laravel开发者实现FormRequest规则方法时的一个常见用例,你希望代码读者能够直接看到由该方法返回的规则定义数组,而无需走完许多if条件。

// Using skipped-attributes

public function rules()
{
    return unskipped_attributes([
        'name' => 'required|string',
        'email' => 'required|email',
        'is_active' => $authenticatedUser->canSetActive() 
            ? 'required|boolean' 
            : skip_attribute(),
        'is_visible' => $authenticatedUser->canSetVisibility() 
            ? 'required|boolean' 
            : skip_attribute(),
        'subscription_ends_at' => $authenticatedUser->canSetSubscriptionExpiry() 
            ? 'required|date' 
            : skip_attribute(),  
    ]);

}
// Without using skipped-attributes

public function rules()
{
    $rules = [
        'name' => 'required|string',
        'email' => 'required|email',
    ];
    
    if($authenticatedUser->canSetActive()){
        $rules['is_active'] = 'required|boolean'    
    }
    
    if($authenticatedUser->canSetVisibility()){
        $rules['is_visible'] = 'required|boolean';
    }
    
    if($authenticatedUser->canSetSubscriptionExpiry()){
        $rules['subscription_ends_at'] = 'required|date';
    }
    
    return $rules;
}

这只是其中一个常见用例,但你可以在许多其他情况下使用它。

如果你不喜欢使用辅助函数

use Noisystate\SkippedAttributes\UnskippedAttributes;
use Noisystate\SkippedAttributes\SkippedAttribte;

$data = UnskippedAttributes::from([
    'one' => 1,
    'two' => 2,
    'three' => $someCondition ? 3 : new SkippedAttribte(),
])->all();