PHP和Symfony

本教程将向你展示如何使用Lokalise PHP SDK来创建webhook,在第三方应用程序中监听webhook事件,并处理传入的通知。

在本教程中,您将学习如何……

  • 使用Lokalise API令牌
  • 使用Lokalise API创建webhook
  • 收听webhooks事件
  • 处理传入的通知

你可以在GitHub上找到源代码

先决条件

本指南假设您有一个Lokalise项目(如果没有,学习如何创建你的Lokalise项目在这里).在本教程中,我们将上传英文翻译。因此,请确保您的项目在ISO代码中添加了英文。

如果你想在你的电脑上本地执行本指南,你需要安装以下软件:

我们要建造什么

我们将创建一个简单的应用程序,允许用户在他们的Lokalise项目中注册webhook。该应用程序还将侦听由这些webhook生成的传入通知,并通过发送API请求对它们做出反应。

准备一个新的Symfony应用程序

运行以下命令创建一个新的Symfony应用程序:

Symfony新lokalise-webhooks—webapp

将创建框架应用程序lokalise-webhooks为你的文件夹。

现在进入该文件夹,设置Symfony应用程序使用Lokalise PHP SDK:

CD lokalise-webhooks编码器需要lokalise/php-lokalise-api

获取API令牌

您应该获得一个现有的API令牌或生成一个新的令牌。学习如何获得Lokalise API令牌.将其存储在.env请按以下方式存档:

LOKALISE_TOKEN = 123 def456

开放配置/ services.yaml并添加token作为参数:

参数:lokalise。api_token: ' % env (LOKALISE_TOKEN) % '

运行你的应用

为了学习本教程,你需要将你的应用程序部署到一些主机上。此外,你可以使用ngrok:

  • 运行如下命令:symfony服务器:启动
  • 遵循Ngrok入门指南
  • 在终端中,导航到解压缩ngrok的文件夹
  • 运行./ngrok config add-authtoken .使用实例
  • 最后,运行/ ngrok http 800
ngrok (Ctrl+C to quit)会话状态在线帐号用户名(计划:Free)版本3.0.3区域欧洲(eu)延迟计算…Web界面http://127.0.0.1:4040转发https://50e1-90-133-221-110.eu.ngrok.io -> http://localhost:8000连接ttl opn rt1 rt5 p50 p90 00 0.00 0.00 0.00 0.00

你的应用程序必须是公开可访问的

如果你的Symfony应用不能公开访问,就不可能注册Lokalise的webhook。这是因为Lokalise向提供的URL发送一个特殊的“ping”请求,并期望收到2xx状态码。如果URL不可访问,webhook将不会被创建。

添加模板

对象中添加一个新模板模板/ web_hooks / index.html.twig文件:

{% for message in app.flash ('notice') %} 
{{message}}
{% endfor %}
< form method="post" action="{{path('app_hooks_register')}}">

< input type="submit" value="Register webhook" /> . font =" font - size

我们将使用这个表单输入一个项目ID并注册一个新的webhook。

注册一个新的webhook

调整src /控制器/ WebHooksController.php文件为所选项目创建一个新的webhook:

<?php名称空间的应用程序\控制器;控制器使用Symfony \包\ FrameworkBundle \ \ AbstractController;使用Symfony \ HttpFoundation \ \组件请求;组件使用Symfony \ \ HttpFoundation \反应;组件使用Symfony \ \ HttpFoundation \会议\ SessionInterface;使用Symfony \组件\路由\注释\路线;类WebHooksController扩展AbstractController{#[路由('/',名称:'app_hooks_home')]公共函数索引(SessionInterface $session): Response {return $this->render('web_hooks/index.html.twig');} #[Route('/registerHook', name: 'app_hooks_register', methods: ['POST'])]公共函数registerWebhook(SessionInterface $session, Request $ Request): Response {$projectId = $ Request -> Request ->get('projectId', null);if(空($projectId)) {$this->addFlash('通知','请输入项目id'); return $this->redirect($this->generateUrl('app_hooks_home')); } $client = new \Lokalise\LokaliseApiClient($this->getParameter('lokalise.api_token')); $client->webhooks->create( $projectId, [ 'url' => 'https://50e1-90-133-221-110.eu.ngrok.io/triggerHook', 'events' => [ 'project.key.added', ], ] ); $this->addFlash('notice', 'Hook registered'); return $this->redirect($this->generateUrl('app_hooks_home')); }

这个webhook将监听project.key.added事件。通知将发送至/ triggerHook路线。

回复通知

现在让我们调整src /控制器/ WebHooksController.php再次归档以添加新的/ triggerHook监听所有传入事件的路由:

<?php名称空间的应用程序\控制器;控制器使用Symfony \包\ FrameworkBundle \ \ AbstractController;使用Symfony \ HttpFoundation \ \组件请求;组件使用Symfony \ \ HttpFoundation \反应;组件使用Symfony \ \ HttpFoundation \会议\ SessionInterface;使用Symfony \组件\路由\注释\路线;类WebHooksController扩展AbstractController {#[Route('/triggerHook',名称:'app_hooks_trigger',方法:['POST'])]公共函数triggerHook(Request $ Request): Response {$data = json_decode($ Request ->getContent(), true, 5, JSON_THROW_ON_ERROR);$event = $data['event'] ??零; if ($event === 'project.key.added') { $keyId = $data['key']['id'] ?? null; $projectId = $data['project']['id'] ?? null; if ($projectId && $keyId) { $client = new \Lokalise\LokaliseApiClient($this->getParameter('lokalise.api_token')); $client->comments->create($projectId, $keyId, [ 'comments' => [ [ 'comment' => '@Bob please review this new key ', ], ] ]); $client->keys->update($projectId, $keyId, [ 'is_hidden' => true ]); } } return new Response('ok'); } }

Webhook数据以JSON格式发送。我们确保接收到的通知不是ping,并且具有正确的事件名称。然后,我们只需添加一个键注释并使用事件的数据更新键。

请注意,您的事件处理程序必须响应POST请求并返回2xx状态码。否则,Lokalise将认为webhook通知不成功,并尝试多次重新发送失败的通知。

测试出来

现在一切准备就绪!打开你的应用程序,并输入一个项目ID注册一个新的webhook。打开Lokalise,进入你的项目,点击顶部菜单中的“Apps”。找到“Webhooks”应用程序,点击它,然后按“管理”。你会看到一个新的webhook为你注册了:

10491049

注意“X-Secret header”隐藏值。你可以在你的应用中使用这个值,并将它与发送给通知路由进行额外的保护(从而过滤恶意请求)。

现在返回Lokalise项目编辑器,创建一个新的翻译键。重新加载页面,确保密钥被隐藏:

290290

点击“Comments”按钮(上面屏幕上的第一个按钮),确保注释显示正确:

528528

就是这样,干得好!


这个页面对你有帮助吗?