protonemedia/laravel-mixins

Laravel Mixins

3.7.0 2024-03-12 11:21 UTC

README

Latest Version on Packagist Total Downloads Buy us a tree

赞助我们

❤️ 我们自豪地通过开发Laravel包并免费提供来支持社区。如果这个包为您节省了时间,或者您在专业上依赖它,请考虑赞助维护和开发,并查看我们的最新高级包: Inertia Table。跟踪问题和拉取请求需要时间,但我们很乐意帮助!

要求

  • PHP 8.1+
  • Laravel 10.0

安装

您可以通过Composer安装此包

composer require protonemedia/laravel-mixins

没有服务提供者或自动发现/注册。所有功能都是可选的。

内容

Blade指令

控制台命令

验证规则

字符串宏

PDF

请求

Blade指令

您可以通过在类上调用directive方法来注册Blade指令。您可以使用可选的第一个参数更改指令的名称。

十进制货币格式化器

注意:此指令需要moneyphp/money包。

注册指令,例如,通过将其添加到您的AppSerivceProvider

ProtoneMedia\LaravelMixins\Blade\DecimalMoneyFormatter::directive();

您可以根据需要自定义指令的名称和默认货币代码

ProtoneMedia\LaravelMixins\Blade\DecimalMoneyFormatter::directive('decimals', 'EUR');

指令的第一个参数是分币金额。第二个可选参数是货币。

// 0.99
@decimals(99)

// 1.00
@decimals(100)

// 100
@decimals(100, 'XTS')

Intl货币格式化器

注意:此指令需要moneyphp/money包。

注册指令,例如,通过将其添加到您的AppSerivceProvider

ProtoneMedia\LaravelMixins\Blade\IntlMoneyFormatter::directive();

您可以根据需要自定义指令的名称、默认货币代码和区域设置

ProtoneMedia\LaravelMixins\Blade\IntlMoneyFormatter::directive('money', 'EUR', 'nl_NL');

指令的第一个参数是分币金额。第二个可选参数是货币。第三个可选参数是区域设置。

// € 0,99
@money(99)

// € 1,00
@money(100)

// US$ 1,00
@money(100, 'USD')

// 1 000,00 $US
@money(100, 'USD', 'fr')

命令

生成网站地图

注意:此命令需要spatie/laravel-sitemap包。

您可以通过将其添加到您的App\Console\Kernel文件或将register方法调用在类上来注册该命令。

ProtoneMedia\LaravelMixins\Commands\GenerateSitemap::register();

您还可以设置自定义签名

ProtoneMedia\LaravelMixins\Commands\GenerateSitemap::register('generate-sitemap');

它生成您整个站点的网站地图并将其存储在public文件夹中的sitemap.xml中。

php artisan sitemap:generate

验证规则

当前密码

如果值与认证用户的密码匹配,则通过。

$rule = new ProtoneMedia\LaravelMixins\Rules\CurrentPassword;

截至Laravel 9,此验证规则是内置的

带边距的尺寸

尺寸规则的扩展,带有一个margin选项。当您处理具有重复小数的比例时非常有用。

use ProtoneMedia\LaravelMixins\Rules\DimensionsWithMargin;

$rule = DimensionsWithMargin::make()->ratio(20 / 9)->margin(1),

主机

验证URL是否与给定主机匹配。

use ProtoneMedia\LaravelMixins\Rules\Host;

$rule = Host::make(['facebook.com', 'fb.me']);

键中

验证给定的键或索引是否存在于数组中。

use ProtoneMedia\LaravelMixins\Rules\InKeys;

$rule = new InKeys(['laravel' => 'Laravel Framework', 'tailwindcss' => 'Tailwind CSS framework']);

// same as

use Illuminate\Validation\Rules\In;

$rule = new In(['laravel', 'tailwindcss']);

最大单词数

如果值包含的单词数不超过指定的数量,则通过。

use ProtoneMedia\LaravelMixins\Rules\MaxWords;

$rule = MaxWords::make(250);

无协议的URL

如果URL有效,即使没有协议,也通过。

$rule = new ProtoneMedia\LaravelMixins\Rules\UrlWithoutScheme;

字符串宏

您可以使用混入功能添加新的方法。

紧凑型

Str::mixin(new ProtoneMedia\LaravelMixins\String\Compact);

$string = "Hoe simpeler hoe beter. Want hoe minder keuze je een speler laat, hoe groter de kans dat hij het juiste doet.";

// Hoe simpeler hoe beter. Want hoe ... de kans dat hij het juiste doet.
echo Str::compact($string);

它有一个可选的第二个参数,用于指定每边的长度。通过可选的第三个参数,您可以指定分隔符。

// Hoe simpeler hoe - het juiste doet.
echo Str::compact($string, 16, ' - ');

人类文件大小

将文件大小转换为可读的字符串版本。

Str::mixin(new ProtoneMedia\LaravelMixins\String\HumanFilesize);

$size = 3456789;

// '3.3 MB'
Str::humanFilesize($size));

文本

注意:此宏需要 html2text/html2text 包。

将 HTML 转换为纯文本。

Str::mixin(new ProtoneMedia\LaravelMixins\String\Text);

$html = "<h1>Protone Media</h1>";

// Protone Media
Str::text($html);

URL

如果给定的 URL 中缺少方案,则预置 https://

Str::mixin(new ProtoneMedia\LaravelMixins\String\Url);

$url = "protone.media";

// https://protone.media
Str::url($url);

秒转换为时间

将秒转换为 'mm:ss' / 'hh:mm:ss' 格式。

Str::mixin(new ProtoneMedia\LaravelMixins\String\SecondsToTime);

Str::secondsToTime(10); // 00:10
Str::secondsToTime(580); // 09:40
Str::secondsToTime(3610); // 01:00:10

// force 'hh:mm:ss' format, even under an hour:
Str::secondsToTime(580, false); // 00:09:40

PDF再生

注意:需要 symfony/process 包。

使用 Ghostscript 重新生成 PDF 内容。

$ghostscript = new ProtoneMedia\LaravelMixins\Pdf\Ghostscript;

$regeneratedPdf = $ghostscript->regeneratePdf(
    file_get_contents('/uploads/invoice.pdf')
);

您还可以指定 ghostscript 二进制文件的路径。

$ghostscript = new Ghostscript('gs-binary');

将Base64输入数据转换为文件

ConvertsBase64ToFiles 特性和 base64FileKeys 方法添加到您的表单请求中。

use Illuminate\Foundation\Http\FormRequest;
use ProtoneMedia\LaravelMixins\Request\ConvertsBase64ToFiles;

class ImageRequest extends FormRequest
{
    use ConvertsBase64ToFiles;

    protected function base64FileKeys(): array
    {
        return [
            'jpg_image' => 'Logo.jpg',
        ];
    }

    public function rules()
    {
        return [
            'jpg_image' => ['required', 'file', 'image'],
        ];
    }
}

现在您可以像常规上传的文件一样获取文件。

$jpgFile = $request->file('jpg_image');

// Logo.jpg
$jpgFile->getClientOriginalName();

此特性还支持嵌套数据。您可以通过嵌套数组引用键,或者使用 点表示法

class ImageRequest extends FormRequest
{
    use ConvertsBase64ToFiles;

    protected function base64FileKeys(): array
    {
        return [
            'company.logo' => 'Logo.jpg',
            'user' => [
                'avatar' => 'Avatar.jpg',
            ],
        ];
    }
}

想了解更多关于这个特性的信息?请查看 博客文章

测试

composer test

变更日志

请参阅 CHANGELOG 以了解最近有哪些变化。

贡献

请参阅 CONTRIBUTING 以获取详细信息。

其他 Laravel 包

  • Inertia Table:Inertia.js 的终极表格,内置查询构建器。
  • Laravel Blade On Demand:用于在内存中编译 Blade 模板的 Laravel 包。
  • Laravel Cross Eloquent Search:用于在多个 Eloquent 模型中搜索的 Laravel 包。
  • Laravel Eloquent Scope as Select:停止在 PHP 中重复 Eloquent 查询作用域和约束。此包允许您通过将其添加为子查询来重用查询作用域和约束。
  • Laravel FFMpeg:此包为 Laravel 提供了 FFmpeg 的集成。文件存储由 Laravel 的文件系统处理。
  • Laravel MinIO Testing Tools:在 MinIO S3 服务器上运行您的测试。
  • Laravel Paddle:Laravel 的 Paddle.com API 集成,支持 webhooks/events。
  • Laravel Task Runner:像 Blade 组件一样编写 Shell 脚本,并在本地或远程服务器上运行它们。
  • Laravel Verify New Email:此包添加了对验证新电子邮件地址的支持:当用户更新其电子邮件地址时,它不会替换旧地址,直到新地址被验证。
  • Laravel XSS Protection:用于防止跨站脚本 (XSS) 的 Laravel 中间件。它对请求输入进行清理,并且可以清理 Blade 输出语句。

安全性

如果您发现任何安全相关的问题,请通过电子邮件 pascal@protone.media 而不是使用问题跟踪器来联系。

鸣谢

许可

MIT 许可证(MIT)。请参阅许可文件获取更多信息。

Treeware

此包是Treeware。如果您在生产环境中使用它,那么我们请求您为世界买一棵树以感谢我们的工作。通过为 Treeware 森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。