percymamedy / laravel-accessory
Laravel 5 的特性集合和辅助方法
Requires
- php: >=5.5.0
- illuminate/support: ~5.0
- mockery/mockery: ^1.0
Requires (Dev)
- orchestra/testbench: ~3.0
This package is auto-updated.
Last update: 2024-09-05 04:46:33 UTC
README
Laravel Accessory
简介
Laravel Accessory 为您的 Laravel 应用程序提供了一组辅助方法和特性,以增强其功能。
许可证
Laravel Accessory 是开源软件,采用 MIT 许可证。
安装
此包仅适用于 Laravel 版本 5.*。
像安装其他由 Composer 管理的依赖项一样安装 Laravel Accessory。
$ composer require percymamedy/laravel-accessory
配置
如果您使用的是 Laravel >= 5.5,则可以跳过服务注册和别名注册,因为 Laravel 具有自动包发现功能。
用法
让我们来看看 Laravel Accessory 提供的可用特性和辅助方法。
可用特性
Laravel Accessory 提供了一些有用的特性,可以轻松应用于您的类。
Makable
Makable
特性简单地为您的类添加了一个 static make()
方法。这允许您流畅地创建类的实例,而无需每次都使用 new
关键字。这仅仅是给对象创建添加了糖。
以下是一个应用了 Makable
特性的 Mail 类
<?php namespace App\Mail; use App\Order; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Accessory\Support\Makable; use Illuminate\Queue\SerializesModels; class OrderShipped extends Mailable { use Makable, Queueable, SerializesModels; /** * The order instance. * * @var Order */ protected $order; /** * Create a new message instance. * * @return void */ public function __construct(Order $order) { $this->order = $order; } /** * Build the message. * * @return $this */ public function build() { // } }
您现在可以使用 static make()
方法直接在类上创建 Mail 类的实例,如下所示
<?php namespace App\Http\Controllers; use App\Order; use App\Mail\OrderShipped; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; use App\Http\Controllers\Controller; class OrderController extends Controller { /** * Ship the given order. * * @param Request $request * @param int $orderId * @return Response */ public function ship(Request $request, $orderId) { $order = Order::findOrFail($orderId); // Ship order... $message = OrderShipped::make($order); Mail::to($request->user())->send($message); } }
Makable
特性的良好用途包括在 Jobs
、Mailables
、Events
和 Notifications
中。当然,您也可以将其应用于任何您想要的类。
Dispatchable
Dispatchable
特性扩展了 Illuminate\Foundation\Bus\Dispatchable
,但添加了一个 static dispatchNow()
方法,允许您将 Jobs
发送到当前进程中的适当处理器。
以下是一个应用了 Dispatchable
特性的 Job 类
<?php namespace App\Jobs; use App\Podcast; use App\AudioProcessor; use Illuminate\Bus\Queueable; use Accessory\Bus\Dispatchable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class ProcessPodcast implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $podcast; /** * Create a new job instance. * * @param Podcast $podcast * @return void */ public function __construct(Podcast $podcast) { $this->podcast = $podcast; } /** * Execute the job. * * @param AudioProcessor $processor * @return void */ public function handle(AudioProcessor $processor) { // Process uploaded podcast... } }
您现在可以使用 static dispatchNow()
方法立即将 Job 发送到类,如下所示
<?php namespace App\Http\Controllers; use App\Jobs\ProcessPodcast; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class PodcastController extends Controller { /** * Store a new podcast. * * @param Request $request * @return Response */ public function store(Request $request) { // Create podcast... ProcessPodcast::dispatchNow($podcast); } }
Dispatchable
特性还添加了一个 when()
方法,允许您根据传递给此方法的条件分发 Job。
您现在可以根据传递给 when()
方法的条件分发 Job。
<?php namespace App\Http\Controllers; use App\Jobs\ProcessPodcast; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class PodcastController extends Controller { /** * Store a new podcast. * * @param Request $request * @return Response */ public function store(Request $request) { // Create podcast... ProcessPodcast::when($request->has('process_podcast'))->dispatch($podcast); } }
您还可以向 when()
方法传递一个闭包。闭包应返回一个布尔值,这将决定是否分发 Job。
<?php namespace App\Http\Controllers; use App\Jobs\ProcessPodcast; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class PodcastController extends Controller { /** * Store a new podcast. * * @param Request $request * @return Response */ public function store(Request $request) { // Create podcast... ProcessPodcast::when(function() use($request) { return $request->has('process_podcast') && $request->process_podcast === 1; })->dispatch($podcast); } }