serwisant / serwisant-cp
https://serwisant.online服务的客户面板SDK
Requires
- php: >=7.4
- ext-json: *
- ext-openssl: *
- adbario/php-dot-notation: ^2.2
- codezero/browser-locale: ^3.1
- composer/package-versions-deprecated: *
- devimteam/silex-cors-provider: ^1.0
- pragmarx/countries: ^v0.8.2
- serwisant/serwisant-api: ~3.2.3
- silex/silex: ^2.3
- symfony/asset: ^3.4
- symfony/twig-bridge: ^3.4
- symfony/yaml: ^3.4
- twig/twig: ^2.12
README
此包包含复杂客户面板应用程序,包括PHP代码、GraphQL查询、Twig模板和CSS/JS资产。整个应用程序基于Silex微框架
布局由Bootstrap提供,并且像整个应用程序一样,采用Apache许可证。
要求
- PHP 7.4或更高版本
开发和部署要求
- composer(安装PHP依赖项)
- node 10.x或更高版本和NPM(构建资产)
关于版本控制的话
这是一个特殊的包。因为它包含复杂的应用程序,我们无法提供长期的后向兼容性。
一旦添加新功能,实施破坏性变化的几率很高。因此,当您构建自己的应用程序,并对模板、资产、逻辑进行自定义修改时,请在您的composer.json
中明确指定版本,例如:"1.0.0"
。如果您以原样安装,并且不做任何修改,可以包含主版本(1.*
),以获取升级。
您已被警告。
用法
典型文件布局
您应该创建基本的目录和文件树。
|--/public
| /public/.htaccess
| /public/index.php
|
|--/composer.json
|--/package.json
public
必须是您的web服务器的根目录。在此目录中,您必须创建两个其他文件:index.php
(请参阅Bootstrap部分)和.htaccess
(请参阅Web服务器配置部分)。请注意:在构建资产时,将创建两个其他目录。
composer.json
是PHP依赖项配置。您需要一个composer
工具来安装它。package.json
是前端依赖项配置。您需要一个npm
工具来安装它。请参阅资产部分。
PHP依赖项
要为您的Web应用程序安装所有必需的依赖项,您必须创建一个文件composer.json
{ "name": "my_application", "require": { "serwisant/serwisant-cp": "1.*" }, "autoload": { "psr-0": { "Serwisant": "src" } } }
文件创建后,运行composer install
。它将生成一个包含许多子目录和文件的vendor
目录。
资产(JS、CSS、图像)
应用程序包含复杂的资产,通过CSS提供前端布局,通过JS提供功能。此外,这些资产还依赖于其他JS库。
要使前端工作,您必须创建package.json
{ "name": "My Application", "private": true, "scripts": { "postinstall": "node vendor/serwisant/serwisant-cp/npm-package/build.js" }, "dependencies": { "serwisant-cp": "file:vendor/serwisant/serwisant-cp/npm-package" } }
并运行npm install
。一旦安装了所有JS依赖项,将运行附加脚本,并在public/assets-serwisant-cp
和public/webfonts
中生成文件。
请注意:JS依赖项必须在PHP依赖项之后安装。
请注意:一旦您安装了所有JS依赖项,您可以在开始上传文件到Web服务器之前删除整个node_modules
目录。
服务器配置
所有依赖项都可以在本地安装,在您的终端中,然后可以使用FTP/SFTP/SCP将所有文件发送到您的Web服务器。如果您可以访问Web服务器的shell并且那里安装了composer
/npm
工具,您可以发送基本文件并直接在Web服务器上运行安装。
最重要的是将您的Web服务器设置为public
子目录,而不是根目录。这是出于安全原因。
不要忘记覆盖apache/nginx配置,以便将每个请求指向您的index.php
。这可以通过一个.htaccess
文件来完成
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Bootstrap
典型的最小Bootstrap如下所示。
$oauth_key = 'YOUR_OAUTH_KEY'; $oauth_secret = 'YOUR_OAUTH_SECRET'; require_once('./vendor/autoload.php'); use Serwisant\SerwisantCp; use Serwisant\SerwisantApi; $application = new SerwisantCp\Application(); $application->set('access_token_public', new SerwisantApi\AccessTokenOauth( $oauth_key, $oauth_secret, 'public', new SerwisantApi\AccessTokenContainerEncryptedFile(sha1($oauth_key)) )); $application->set('access_token_customer', new SerwisantApi\AccessTokenOauthUserCredentials( $oauth_key, $oauth_secret, 'customer', new SerwisantApi\AccessTokenContainerSession() )); $application->setRouter(new SerwisantCp\ApplicationRouter()); $application->run();
$application->set('access_token_public',...
公共访问令牌通过 AccessTokenContainerEncryptedFile
存储在加密的本地文件中。默认情况下,系统使用 /tmp
目录。您可以通过设置 TMPDIR
环境变量来更改整个模块的临时目录,例如:
putenv('TMPDIR=' . realpath('/path/to/tmp/dir'));
如果您在分布式、多服务器环境中运行应用程序,或者您想提高性能,请使用 SQL 数据库容器。
new SerwisantApi\AccessTokenContainerPDO(['mysql:dbname=db;host=127.0.0.1', 'user', 'password'])
公共访问令牌对所有用户都是通用的 - 它在第一次请求时生成,并缓存供其他用户重用。
$application->set('access_token_customer',...
客户访问令牌存储在会话中。您可以将它保存在其他存储中,但您必须记住,客户访问令牌是用户特定的,每个登录客户都有一个与其用户名/密码相关的令牌。
默认情况下,会话存储将使用全局、系统临时文件夹中的文件。您可以在启动文件中配置自己的会话存储,例如使用数据库。有关高级主题,请参阅相关部分。
$application->setRouter(...
这是默认路径/路由设置。如果您想创建自己的页面或更改前缀路径,请通过扩展 Router
创建一个新的路由器。默认情况下,您需要挂载:
高级主题,修改应用程序
首先,不要直接修改模块中的任何代码部分。如果版本发生变化,并且您被迫更新,所有编辑将消失,您需要重新实现。
应用程序有一些功能,允许在不接触内部代码的情况下应用修改。
自定义视图和翻译
默认情况下,所有视图都存储在模块内的 views/
文件夹中,翻译存储在模块内的 translations/
文件夹中。您可以覆盖视图和翻译,也可以添加自己的语言翻译。在启动文件中初始化应用程序时,将应用程序的目录路径传递给额外的目录。
对于视图:将具有与原始视图相同名称的文件放入配置的文件夹中。您的自定义文件将优先于原始视图。强烈建议不要从头创建自定义视图。将原始视图复制到您的自定义文件夹并对其进行调整。
对于翻译:为您的语言准备额外的翻译 - 您应使用 translations/pl.yml
作为基础。然后将新文件放入应用程序目录中并添加到参数中。应用程序将检测所有可用的翻译,并使用客户浏览器的语言设置提供服务。如果没有可用的翻译,则可以使用默认翻译。
$application = new SerwisantCp\Application('production', ["./views"], [], ["./translations/en.yml", "./translations/de.yml"], 'en_GB');
参数
- 环境,使用
production
- 包含备用视图的目录(完整路径)数组
- (不在此文档的范围之内)
- 翻译文件数组
- 如果没有匹配项,则使用默认翻译
自定义修饰符
覆盖与位置/翻译检测相关的逻辑,包括翻译、时区等。通过扩展原始类来使用静态语言,并使用 set
方法使用它。
class LocaleDetector extends \Serwisant\SerwisantCp\LocaleDetector { public function __construct() { $this->default_locale = 'pl_PL'; $this->locale = 'pl_PL'; $this->country = (new \PragmaRX\Countries\Package\Countries())->where('cca2', explode('PL')->first(); } } $application->set('locale_detector', new LocaleDetector());
您可以使用数据库会话存储 - 使用包含适当数据库凭据的新实例的 PdoSessionHandler。
$application->set('session_handler', new \Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler(...))
主要更改
- 1.0 - 初始发布
- 1.1.0 - 改变了构建资产的方式,新的方法与旧的不兼容