serwisant/serwisant-cp

https://serwisant.online服务的客户面板SDK

1.1.3 2024-07-31 16:09 UTC

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-cppublic/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 - 改变了构建资产的方式,新的方法与旧的不兼容