darkghosthunter / larahelp
使用有用的全局助手为您的 Laravel 项目注入活力。
Requires
- php: ^8.0
- ext-json: *
- illuminate/support: ^8.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.0
- mockery/mockery: ^1.4
- moneyphp/money: ^v4.0.2
- nesbot/carbon: ^2.41
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.3
README
Larahelp
使用超过 25 个有用的全局助手为您的 Laravel 项目注入活力。
要求
- Laravel 8.x 或更高版本
- PHP 8.0 或更高版本
安装
您可以通过 composer 安装此包
composer require darkghosthunter/larahelp
此包专注于后端。如果您想使用视图助手,我建议您使用 自定义 Blade 指令。
使用方法
此包包含有用的全局助手,可以让您的项目将几乎任何内容转换为美丽的 一行代码
app_call()
使用应用程序容器执行可调用对象。
$result = app_call('\App\MyService\Service@createSomething');
call_existing()
如果对象实例中存在动态方法或宏,则调用它。它支持宏和静态方法。
class Something { public function foo() { return 'bar'; } } call_existing(new Something, 'bar'); // null call_existing(new Something, 'foo'); // "bar"
created()
返回一个 HTTP 201 响应(OK,已创建),可选包含内容。
public function store(Request $request): Response { // ... return created([$post->getKeyName() => $post->getKey()]; }
data_update()
使用接收它的回调函数更新数组或对象中的项目。
$array = [ 'foo' => [ 'bar' => null ] ]; data_update($array, 'foo.bar', function ($value) { if ($value === null) { return 'baz'; } }) // [ // 'foo' => [ // 'bar' => 'baz' // ] // ];
即使键不存在,值也会被更新。
delist()
返回数组的值,因此可以将它们列在变量中。它可以接受一个可选的偏移量,以删除给定数量的第一个键。
$array = [ 'foo' => 'bar', 'baz' => 'qux', 'quux' => 'quuz', ] [$baz, $quux] = delist($array, 1);
diff()
返回两个日期之间的秒数或任何其他给定单位的差值。
$seconds = diff('now', '15th may'); $minutes = diff('today', now())
dot_path()
将相对路径转换为点表示法。
$path = dot_path('files/user_id_312/videos/'); // files.user_id_312.videos
这不会验证文件路径。您应该手动将文件名追加到点路径中。
enclose()
如果值或可调用对象不是可调用的,则将其包装在闭包中。
$enclosed = enclose('foo'); $enclosed(); // "foo"
files()
返回本地文件系统助手,或路径中的文件列表。
$content = files()->get('text.txt');
has_trait()
递归检查对象是否使用单个特性。
trait Child { // .. } trait Parent { use Child; // .. } class Foo { use Parent; } has_trait(Foo::class, Child::class); // true
hashy()
从字符串创建一个小型BASE64编码的MD5哈希值,用于便携式校验和。
这对于哈希大量文本墙或文件非常有用,同时将128位哈希压缩到24个字符的字符串。
$hash = hashy('This is a hashable string'); // "TJYa8+63dRbdN6w44shX1g=="
您可以使用相同的函数来比较可哈希字符串与哈希,以检查它是否被修改。
hashy('This is a hashable string', 'TJYa8+63dRbdN6w44shX1g=='); // true hashy('This is a hashable string!', 'TJYa8+63dRbdN6w44shX1g=='); // false
in_console()
检查应用程序是否在控制台运行,例如使用Artisan或PHPUnit。
if (in_console()) { return "We're in console"; }
它还接受一个可调用对象,如果条件为真,将执行该可调用对象。
$result = in_console(fn() => 'foo'); // "foo"
in_development()
检查应用程序是否在开发环境中运行:dev
、development
或local
if (in_development()) { return "Do anything, it doesn't matter!"; }
它还接受一个可调用对象,如果条件为真,将执行该可调用对象。
$result = in_development(fn() => 'foo'); // "foo"
logged_in()
在用户登录时执行单个回调。
它基本上在执行回调时登录和注销用户,这在guest路由上非常有用。
use App\Models\User; $user = User::find(1); $post = logged_in($user, function (User $user) { return $user->post()->create([ // .. ]); });
如果已经有一个用户登录,它将抛出异常。
methods_of()
返回给定类或对象的所有公共方法集合。
use Illuminate\Support\Collection; $methods = methods_of(Collection::class) return $methods->has('make'); // true
missing_trait()
递归检查对象是否未使用特性。
trait Parent { // .. } class Foo { use Parent; } missing_trait(Foo::class, Child::class); // true
none_of()
检查与主题比较的选项中没有任何一个返回真值。
$subject = 'foo'; none_of('foo', ['bar', 'baz', 'qux']); // false
使用可调用对象,它将接收主题和被比较的键。
$subject = 'foo'; none_of('foo', ['bar', 'baz', 'qux'], fn ($subject, $compared) => $subject === $compared); // false
object_assign()
使用点表示法递归地将值数组分配给对象。
$object = new stdClass(); object_assign($object, ['foo' => 'bar']); echo $object->foo; // "bar"
ok()
返回HTTP 204响应(OK,无内容)。
public function send(Request $request) { // ... return ok(); }
period()
返回给定开始和结束或区间的周期。周期对于根据开始、结束和给定每个发生之间的时间获取多个日期非常有用。
创建周期最常见的方法是定义开始、发生次数和间隔数量。
$periods = period('now', 4, '15 minutes');
或者,您可以指定一个开始、一个结束以及到达该结束的时间间隔。
$period = period('today', 'last day of this month', '3 days');
完成之后,您可以使用foreach
循环迭代每个时间点。
foreach (period('today', 'last day of this month', '3 days') as $datetime) { echo $datetime->toDateTimeString(); } // 2015-07-21 00:00:00 // 2015-07-24 00:00:00 // 2015-07-27 00:00:00 // 2015-07-30 00:00:00
period_from()
从给定日期返回下一个或上一个周期,默认为排除。
这对于知道给定时间(如当前时间)的下一次或上一次时刻非常方便。
$period = period('2015-07-06 00:00:00', '2015-07-26 00:00:00', '1 week'); period_from($period, '2015-07-13'); // 2015-07-13
通过将$after
设置为false
,该函数还可以检查前一个日期。
$period = period('2015-07-06 00:00:00', '2015-07-26 00:00:00', '1 week'); period_from($period, '2015-07-06'); // 2015-07-13
比较的日期是排除的。要包括日期作为包含,将
$inclusive
设置为true
。
pipe()
通过管道发送对象。
pipe(10, [ fn($integer, $next) => $next($integer + 10); fn($integer, $next) => $next($integer - 5); ]) // 15
remember()
从缓存中获取项,如果项不存在则存储默认值。
remember('foo', 60, function() { return 'bar'; })
如果没有设置 ttl
,而是第二个参数提供一个回调,它将永久存储。
remember('foo', function () { return 'bar'; })
它支持原子锁,使用相同的名称键创建。它将锁定键并等待相同的时间。
remember('foo', 60, function() { return 'bar'; }, 20);
这可以用来避免缓存数据竞争,其中多个进程因为缓存键尚未填充而运行相同的回调。
route_is()
确定当前路由的名称是否匹配给定的模式。
if (route_is('dahsboard.*')) { return 'You are in the dashboard'; }
shadow()
如果存在则在一个对象上调用方法,否则返回false。它支持宏。
if ($rendered = shadow($mayRender, 'render')) { return $rendered; } return response((string)$mayRender);
sleep_between()
在多次执行之间睡眠时运行回调,返回所有结果的集合。
use App\Models\User; sleep_between(3, 1000, fn() => User::query()->inRandomOrder()->value('name')) // [ // 'john', // 'michel', // 'maria', // ]
taptap()
使用给定值调用给定的闭包然后返回值,两次。
use App\Models\User; use App\Notifications\Message; return taptap(User::find(1))->notify(new Message('Hello!'))->save();
undot_path()
将路径从点表示法转换为相对路径。
$path = undot_path('files.user_id_312.videos'); // files/user_id_312/videos/
until()
返回日期到期望日期的时间间隔。
until('now', 'next month')->total('days'); // 25
user()
如果有的话,返回当前认证用户。
user()?->name; // "John Doe"
weekend()
返回一周的结束。它支持设置周末是星期几。
weekend()->toDateTimeString(); // 2015-07-05 23:59:59 weekend('now')->toDateTimeString(); // 2015-07-13 23:59:59
weekstart()
返回一周的结束。它支持设置星期从哪一天开始。
weekstart()->toDateTimeString(); // 2015-06-28 00:00:00 weekstart('now')->toDateTimeString(); // 2015-07-06 00:00:00
which_of()
返回比较或回调返回true的选项的键。
$which = which_of('foo', [0 => 'baz', 1 => 'bar', 2 => 'foo']) // 2
如果回调返回了一些真实的东西,那么将使用那个值。
$which = which_of( 'foo', ['baz', 'bar', 'foo'], fn($subject, $option) => $subject === $option ? 'cougar' : false) ); // "cougar"
yesterday()
返回昨天的日期。
// 2015-07-12 17:30:00 yesterday(); // 2015-07-11 00:00:00
缺少一个助手?
如果你有助手的想法,请作为问题提交。具有测试和良好代码质量的PR将获得优先权。
安全
如果你发现任何安全相关的问题,请通过电子邮件darkghosthunter@gmail.com而不是使用问题跟踪器。
许可
MIT许可(MIT)。请参阅许可文件以获取更多信息。