PHP
Introducing Iterator Functions
This post exmplains how you can work with iterators and generators as if they were arrays. Read more
This post exmplains how you can work with iterators and generators as if they were arrays. Read more
Here, we will learn about how we can dynamically add and remove table rows using VueJs. Step 1: Create New App. ng new angular-addremove Step 2: Update ts file. Add below code in src/app/app.component.ts. import { Read more…
Michael Dyrynda explains how you can use immutable dates in Laravel by default. Read more
At work, Tim MacDonald decided to show git rebase the love it deserves with a brown bag session. He has record it, so we can enjoy it as well. Read more
In this post, Jean Yang focusses on why we donât see more high-growth startups focused on the kinds of languages and tools coming out of the PLDI community, the âdeep techâ side of programming tools. Read more…
One of the new features in PHP 8.1 is that PHP’s $_FILES super global variable now contains the path to the files uploaded by the user. Read more
There’s no new functionality, but having these new commands will make Git easier to use. Read more
[AdSense-A]
In this stream, Pest creator Nuno Maduro explains how his testing tool works under the hood.
If you want to know how to use Pest (or PHPUnit) to test your application code, consider picking up our Testing Laravel video course.
(more…)Over at Flare, we’re now using the latest version of Spark. In this blog post we shared the customizations we needed to make. Read more
[AdSense-A]
Whenever something happens in one of your repos on GitHub, you can configure a webhook to be sent to your app. This way, you can perform some extra logic when a particular event occurs on the repo. A silly example would be to send someone a mail when an issue is opened.
We've created a new package called spatie/laravel-github-webhooks that makes it easy to consume GitHub webhooks in a Laravel app. In this blog post, I'd like to tell you all about it.
In this stream, I show how to use the package, go over the source code, and explain how it is tested.
After you've installed the package in your app, you can start configuring what should happen when GitHub webhooks hit your app. GitHub expects your app to respond as fast as possible. That's why the package will, when a webhook comes in, create a GitHubWebhookCall
model with the payload of the webhook in the database. It will pass that model to a queued job so that an HTTP response can be sent very quickly, and the actual work that needs to be done can be performed on the queue.
In the jobs
key of the github-webhooks
config file, you can configure which jobs should be executed when certain events come in. Here's an example:
// in the `github-webhooks` config file
'jobs' => [
'issues.opened' => AppJobsHandleIssueOpenedWebhookJob::class,
],
In this example, the HandleIssueOpenedWebhookJob
job will be dispatched when a webhook of type issues
comes in with an action
of opened
in the payload.
Here's how the HandeIssueOpenedWebhookJob
could look like:
namespace AppJobsGitHubWebhooks;
use IlluminateBusQueueable;
use IlluminateQueueSerializesModels;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
use SpatieGitHubWebhooksModelsGitHubWebhookCall;
class HandleIssueOpenedWebhookJob implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
public GitHubWebhookCall $gitHubWebhookCall;
public function __construct(
public GitHubWebhookCall $webhookCall
) {}
public function handle()
{
// React to the issue opened at GitHub event here
// You can access the payload of the GitHub webhook call with `$this->webhookCall->payload()`
}
}
And that is all you have to do to handle an incoming GitHub webhook in your app.
spatie/laravel-github-webhooks is very much a meat-and-potatoes kind of package. No new big ideas are introduced here. Still, the package handles a lot of work for you:
To know more about the package, head over to the readme on GitHub. There are a lot of options not mentioned in this post. Also, be sure to look at this list of packages our team has created previously.
If you want to support our open source efforts, consider picking up one of our paid products.
(more…)