2media/policies-builder
Composer 安装命令:
composer require 2media/policies-builder
包简介
PHP Package to generate policies for websites
README 文档
README
A PHP package to build and generate policies for landingpages and websites. It currently supports the following policies:
- Terms of Service
- Imprint
- Privacy Policy
- Conditions of Participation
'policies' => PoliciesConfiguration::make() ->languages(['de', 'fr', 'it', 'en']) ->domain('example.ch') ->brand('2media') ->types([ TermsOfService::make(), Imprint::make() ->imageCopyrights([ Copyright::make('Picasso', 'Adobe Stock', 'Hero Image 1'), ]), ]),
Installation
The package can be installed via composer.
composer require 2media/policies-builder
Usage
Jigsaw
Before you can start generating policies with the package, you need to first configure your Jigsaw project.
Collection & Template
Add a new remote collection to your project. Add the following line to your projects config.php. (If you already use collections in your project, only add the policies key to your existing collections-array.)
'collections' => [ 'policies' => [ 'items' => fn(Collection $config) => (new PoliciesCollection())->generate($config), ], ],
This remote collection will be responsible for generating all configured policies.
In addition create a new layout file under source/_layouts.policy. All generated policies will extend this layout file.
Policies Configuration
Next, add a policies key to your projects config.php with a PoliciesConfiguration instance.
'policies' => PoliciesConfiguration::make() ->languages(['de']) ->domain('example.com') ->brand('2media') ->types([ // Policies Objects ]),
The PoliciesConfiguration-object holds configuration values which are used by all policies. See below for supported methods.
languages([])
Required. Accepts an array of ISO-639-1 language codes for which policies should be generated.
We currently support:
de(German)fr(French)it(Italian)en(English)es(Spanish)pt(Portuguese)sr(Serbian)sq(Albanian)tr(Turkish)pl(Polish)
domain(string)
Required. The domain of the project.
brand(string)
Optional. Defaults to 2media. Define for which brand the policies should be generated. Depending on the brand, different policies are generated.
variant(string)
Optional. Defaults to default. Define which variant of policies you would like use in this project.
TODO: Needs better documentation and examples.
types([])
Required. An array of configured policies. See Supported Policies for details.
Supported Policies
The following policies can currently be built with this package.
Terms of Service
By adding the following policy to the type() method of the PoliciesConfiguration a terms of service policy is being generated.
TermsOfService::make(),
If the website is operated in cooperation with a different company, use the inCooperationWith() method to indicate this in the terms of service. (Note that not all variants support this feature.)
use Twomedia\PoliciesBuilder\DTOs\CooperationPartner; use Twomedia\PoliciesBuilder\Policies\TermsOfService; TermsOfService::make() ->inCooperationWith(CooperationPartner::make( 'Legal Name', 'Name', 'https://example.com' ));
If the website is operated on behalf of a different company, use the onBehalfOf() method to indicate this in the terms of service. (Note that not all variants support this feature).
use Twomedia\PoliciesBuilder\DTOs\CooperationPartner; use Twomedia\PoliciesBuilder\Policies\TermsOfService; TermsOfService::make() ->onBehalfOf(CooperationPartner::make( 'Legal Name', 'Name', 'https://example.com' ));
Imprint
To generate imprints, add the following code to the type() method of the PoliciesConfiguration.
Optionally, the package also generates an image copyright section for you.
Imprint::make() ->imageCopyrights([ Copyright::make('Author', 'source.com', 'Internal Note'), ]),
imageCopyrights([Stringable])
Optional. Use the imageCopyrights() method and the Copyright-object to define the image copyrights of the project. If the project contains Icons which you do not want to list each on it's own use the IconCopyright-object.
Please always use the domain of the source instead of its name.
(Note the example below assumes you use PHP 8.0 and Named Arguments)
// © Picasso / unsplash.com Copyright::make(author: 'Picasso', source: 'unsplash.com', description: 'Hero Image'); // Icons © thenounproject.com IconCopyright::make(source: 'thenounproject.com');
If none of the above classes solve the Copyright question for your project, feel free to create your own Copyright class. It just needs to implement the Twomedia\PoliciesBuilder\Contracts\Stringable interface – meaning just add a __toString method to your class.
new class() implements Stringable { public function __toString() { return 'Anonymous Copyright Class'; } }
Privacy Policy
By adding the following policy to the type() method of the PoliciesConfiguration a privacy policy is being generated.
PrivacyPolicy::make(),
There are currently no specific configuration options available for PrivacyPolicy.
Conditions of Participation
To generate a "Conditions of Participation" policy for competition campaigns, add the following block to the type() method of the PoliciesConfiguration.
ConditionsOfParticipation::make();
closingDate(string)
Use the closingDate() method to pass the end date of the competition to the policy.
ConditionsOfParticipation::make() ->closingDate('31.12.2030');
Global Translations
Instead of defining the translations for the names of the policies ("Impressum", "Conditions d’utilisation") for the policies in your Jigsaw project, you can use the GlobalTranslator that comes with the package.
The GlobalTranslator connects with our Webservice and gets the translations from a central place. If you follow these directions, the HTTP requests won't have any impact on the build time, as the requests/responses are cached for 24 hours on your machine.
Setup Caching
As Jigsaw doesn't expose a Cache system like in a normal Laravel application, we have to do it ourselves. Add the following line to your bootstrap.php file to register the packages cache into the Jigsaw Container.
$events->beforeBuild(\Twomedia\PoliciesBuilder\Cms\Jigsaw\Listeners\RegisterCacheInContainer::class);
Add transGlobal function
Add the following line to your projects config.php to expose the GlobalTranslator in your projects blade templates.
'transGlobal' => function ($page, $key, array $replace = []) { return Container::getInstance()->make(GlobalTranslator::class)->trans($page, $key, $replace); },
In your templates, you can now use transGlobal() method to get translated strings for all the policies.
{{ $page->transGlobal('global.imprint') }} {{ $page->transGlobal('global.terms') }} {{ $page->transGlobal('global.privacy') }} {{ $page->transGlobal('global.conditions_of_participation') }}
Available Translations Keys
The following translations keys are currently available:
global.imprintglobal.termsglobal.privacyglobal.conditions_of_participation
The key are defined by the Webservice app. You can find the German version of the available keys here.
Statamic
The package currently doesn't support Statamic yet.
Install local version in a project
If you're working on the package locally and want to test thing in a demo project you can use the composer path-repository format.
Add the following snippet to the composer.json in your demo project.
{
"repositories": [
{
"type": "path",
"url": "/path/to/policies-builder/",
"options": {
"symlink": true
}
}
],
}
And "install" the package with composer require 2media/policies-builder or composer update 2media/policies-builder. The package should now be symlinked in your demo project.
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.
2media/policies-builder 适用场景与选型建议
2media/policies-builder 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 567 次下载、GitHub Stars 达 2, 最近一次更新时间为 2025 年 07 月 28 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「twomedia」 「policies-builder」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 2media/policies-builder 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 2media/policies-builder 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 567
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 19
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-07-28