qbnk/frontend-components

Slim-based frontends 的共享前端组件。

6.3.1 2024-09-03 11:02 UTC

README

Account-manager 的设置示例

$settings = [
        'account-manager' => [
			'qbank-manager-group-ids' => [20],
			'terms' => 'Lorem ipsum dolor...',
			'account-expire' => '+1 year',      // set false to disable this setting
			'apply-page-group-ids' => [1,2,3],
			'approve-page-group-ids' => [1,2,3,4],
			'custom-options' => [
				'Company' => [
					'array' => false,
					'mandatory' => true
				],
				'Country' => [
					'array' => true,
					'mandatory' => true,
					'multiple' => true,
					'options' => [
						'Sweden',
						'Norway',
						'Denmark'
					]
				]
			]
		]
    ]

如何实现...

以下章节应解释如何在前端项目中实现和使用某些组件。

下载多个文件

从 v3.0 开始,下载多个媒体的功能已更新,现在 DownloadController::downloadMultiple() 需要不同的参数。它不再接受参数中的模板,相反,下载模板通过 DownloadController::setDownloadTemplate() 设置。该方法接受一个分类(例如,MimeType::CLASSIFICATION_IMAGE)和一个模板 ID。在获取物理文件时,DownloadController 使用 DownloadController::getDownloadTemplate() 对媒体进行分类。如果您将模板设置为 0null,将获取原始文件。

DownloadController::downloadMultiple() 下载的媒体可以是 MediaResponse 数组或媒体 ID 数组(必须是数字)。

示例代码

$media = [
    1337,
    999,
    123,
];
// or an array of MediaResponse, eg. from a QBank search

$downloadController = new DownloadController($this->qbankApi);
		
$imageTemplates = (int) $request->getQueryParam('imageTemplates');
$videoTemplate = (int) $request->getQueryParam('videoTemplate');

// If a specific classification has more than one template, call addDownloadTemplate multiple times
foreach($imageTemplates as $imageTemplate) {
    $downloadController->addDownloadTemplate(MimeType::CLASSIFICATION_IMAGE, $imageTemplate);
}
$downloadController->addDownloadTemplate(MimeType::CLASSIFICATION_VIDEO, $videoTemplate);

$downloadController->downloadMultiple($media, $deploymentSiteId, $sessionId, $zipFileName, $deploymentPath, $debug);

DownloadController::downloadMultiple 抛出多个异常,因此将其包装在捕获 Throwable 的 try-catch 中是一个好主意,记录错误并生成用户友好的错误消息。

DownloadController::setDownloadTemplate 目前接受四种(4)分类,对应于:MimeType::CLASSIFICATION_IMAGEMimeType::CLASSIFICATION_VIDEOMimeType::CLASSIFICATION_AUDIOMimeType::CLASSIFICATION_DOCUMENT,这是 QBank 中的四种可配置模板类型。对于其他分类,始终下载原始文件。

DownloadController::downloadMultiple 不支持从同一媒体获取多个物理文件,如果需要,这种功能必须在特定项目中实现。

Middleware\IPAutoLogin

要正确实现 `IPAutoLogin`,设置数组必须包含一个允许的 IP 地址数组,以及一个反映真实用户及其适当访问权限的用户的用户名。

$settings[QB_SETTINGS][QB_FRONTEND][QB_IP_AUTO_LOGIN] = [
    'username' => 'apiuser',
    'firstname' => 'Api',
    'lastname' => 'User',
    'allowedIps' => [
        '123.45.67.89',
        '123.45.*.*'
    ]
];

重要提示:由于 `IPAutoLogin 根据用户的 IP 地址创建会话,因此必须在 RequireAuthenticatedUser 之前执行此操作。这是因为 RequireAuthenticatedUser 中间件查找已验证用户(IPAutoLogin 创建)。要使其在 RequireAuthenticatedUser 之前执行,请将其添加在 之后 - 因为 Slim 在外部调用中间件。

从 v2.6 开始,`IPAutoLogin` 支持在 IP 地址中使用通配符。使用星号 (*) 表示 IP 地址的通配符部分。请注意,该插件目前仅支持 IPV4 地址。

// Invoke IPAutoLogin AFTER RequireAuthenticated user
// as Slim invokes middleware from outside and in
$app->group('', function () use ($app) {
    $app->get('/someUrl', SomeClass::class . ':index');
})->add(RequireAuthenticatedUser::class)->add(IPAutoLogin::class);

Middleware\Translation

此中间件使用 PHP 中的 `gettext() 函数实现翻译。在某个位置的 `routes.php` 中添加 $app->add(Translation::class);,以便注册中间件。

首先,中间件从用户的浏览器中获取 `HTTP_ACCEPT_LANGUAGE 标头。其次,它检查 cookie。如果存在 cookie,则它优先于 `HTTP_ACCEPT_LANGUAGE`。

您必须定义获取用户选择语言所用的 cookie 名称,以及 `gettext()` 配置函数的设置数组密钥。此配置可能添加到 `default.php` 配置中。

define('QB_FRONTEND_TRANSLATION','frontendtranslation');
$settings[QB_SETTINGS][QB_FRONTEND][QB_FRONTEND_TRANSLATION] = [
    'directory' => realpath(__DIR__ . '/../locales'),
    'domain' => 'messages',
];

您必须定义 cookie 名称,这也可能添加到 `default.php`

define('QB_FRONTEND_LANG_COOKIE','qbankfrontendlanguage');

最后,您必须能够在调用 `gettext() 后解析所有源文件,这应该使用翻译文件。最简单的方法是在前端项目中添加应用程序控制台,并使用以下命令:php app/console.php gettext:generategettext:compile`。

截至2020年2月4日,在前端项目中可以找到一个工作良好的应用程序控制台实现,位于 frontends/peab-mediaportal。