guyliangilsing/php-base

一个简单的PHP应用程序基础项目。

1.0.0 2022-09-29 11:26 UTC

This package is auto-updated.

Last update: 2024-09-29 06:09:13 UTC


README

一个简单的PHP应用程序基础项目。

目录

安装

$ composer create-project guyliangilsing/php-base YOUR_PROJECT_NAME HERE

先决条件

在可以使用此项目基础之前,必须安装以下工具和应用程序,并通过命令行访问

应用程序和工具版本

此项目基础是用以下应用程序和工具版本创建的

所需的PHP扩展

以下扩展必须在 php.ini 文件中激活

  • curl
  • fileinfo
  • openssl

运行命令

在此README文件中,将列出命令。所有这些命令都必须从根目录运行。根目录是此README文件所在的目录。

注意:composer的版本无关紧要,只要它是2.x版本即可。

重要:所列版本已在此项目基础的开发中使用,并且应该没有问题。请注意,您可能添加的其他依赖项,因为它们可能无法支持给定的PHP版本。

项目设置

在开始项目之前,必须先进行设置过程。

安装composer依赖

$ composer install

创建环境文件

重要的是要将 example.env 文件的内容复制到新的 .env 文件中。在开始对应用程序的每次请求时都会读取 .env 文件的内容。如果没有创建此文件,将导致异常错误。

Web服务器设置(可选)

在Web服务器上运行此应用程序时,请确保执行以下设置过程。

注意:有关Web服务器设置的更多信息,请访问 slim框架文档

应用程序根目录

整个应用程序的根目录位于 public 文件夹中。当使用外部Web服务器时,请确保配置中的根目录设置为该文件夹。

请求重定向

所有请求都应重定向到 index.php 文件。

Apache

请确保以下Apache模块已启用

  • rewrite
  • actions
# Redirects all incomming requests (and failed file paths) to the index.php file
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

Nginx

以下Nginx配置可以用于

server {
    listen 80;
    server_name example.com;
    index index.php;
    error_log /path/to/example.error.log;
    access_log /path/to/example.access.log;
    root /path/to/public_folder;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ \.php {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_index index.php;
        fastcgi_pass 127.0.0.1:9123;
    }
}

源目录结构

直接为主应用程序提供功能的所有代码应放在 src(源)目录中。在 src 中,放置以下文件夹

  • App 包含所有应用程序代码。
  • Config 包含所有应用程序配置代码(依赖注入设置、ORM设置、加载 .env 文件等)。
  • 框架 包含所有为应用程序启动过程提供基本功能的代码(提供路由处理程序、将依赖容器定义注册到 DI 库中等)

App目录

App 目录包含所有应用程序代码,默认使用分层架构。App 目录有以下子目录

Common
此目录包含需要在应用程序每个层内重复使用的所有代码。

Common\Helpers
此目录包含需要在应用程序每个层内重复使用的所有辅助代码。它包含一个标准的 HTTP 类,该类仅提供绝对路径的基础。

Presentation
此目录包含应用程序表示层的所有代码。在此目录中,应将提供应用程序表示方面功能的所有内容放置于此。

Presentation\Middleware
此目录包含表示层需要使用的所有中间件。它包含一个标准的中间件类,该类从 URL 中删除尾部和重复的斜杠。

Config目录

此目录包含为整个应用程序的启动过程提供功能的所有代码。该目录包含一个唯一的 di.php 文件,该文件提供 DIConfig 类。一个 DIConfig 类提供特定数据给依赖容器。

App
此目录包含所有为应用程序提供功能的配置类。

App\Autoloading
此目录包含向依赖容器提供特定数据的 DIConfig 类。一个 DIConfig 类可以用来向依赖容器添加 定义 或运行必要的启动过程(例如加载 .env 文件或设置数据库连接)。有三个默认的 DIConfig

  • SetupDependenciesDIConfig 向依赖容器添加通用的依赖容器定义。
  • SetupEnvDIConfig 加载 .env 文件内容并将其变量添加到 $_ENV 超全局变量中。
  • SetupRouterDIConfig 向应用程序添加路由功能(由于此过程不应被编辑,因此将其放在单独的 DIConfig 类中)。

Framework目录

此目录包含为应用程序启动过程提供基本功能的所有代码。框架目录还可以包含一般辅助程序和实用工具,但仅在必要时才应这样做,否则应在 ./src/App 目录内创建某种类型的 Common 目录。

应用程序启动过程

在注册路由之前,了解此应用程序基础如何启动和配置自己非常重要。应用程序启动过程如下

  1. 创建一个依赖容器。
  2. 注册所有依赖项并运行所有启动过程。
  3. 创建一个基础应用程序类,该类引导一个 Slim 框架 App 实例。
  4. 将所有中间件注册到 slim 应用程序实例。
  5. 注册路由。
  6. 分发路由。

如果出于任何原因,依赖容器需要用于设置类似 ORM 之类的功能,则 getDependencyContainer() 函数将运行启动过程的第 1 步和第 2 步。可以在 ./src/bootstrap.php 被包含后立即调用此函数。

重要:在步骤 1 和 2 期间无法访问依赖容器。不要多次调用 getDependencyContainer()

在本地运行项目

如果可以从终端或 CLI 访问 php 命令,则可以使用它来在本地运行项目。为此,可以从项目根目录执行以下两个命令

$ cd public
$ php -S 127.0.0.1:8080

第一条命令将当前目录更改为public目录。这是项目的web服务器根目录,包含应用程序的入口点。

第二条命令启动一个本地的php开发服务器。这个服务器的独特之处在于,当没有其他可用或匹配的文件时,它会将所有内容重定向回index.php文件。如果需要实际的web服务器,建议查看README文件中的docker部分。

在Docker中运行项目

此项目基础包含一个预配置的Dockerfile,位于根目录。该文件创建了一个使用apache作为其web服务器的镜像。apache配置文件位于根目录中的config文件夹。

构建镜像

在运行docker容器之前,您首先需要构建镜像

$ docker build ./ -t YOUR_IMAGE_NAME_HERE

启动容器

构建镜像后,您可以按照以下方式运行

$ docker run -it -p 127.0.0.1:8080:80 -td YOUR_IMAGE_NAME_HERE

注意:上面的命令将在以下URL上启动此应用程序: 127.0.0.1:8080

停止容器

容器运行后,您可以使用以下命令停止它

$ docker stop <container_name>

注意:可以通过运行以下命令找到容器名称

$ docker ps

删除容器

容器停止后,可以使用以下命令将其删除

$ docker rm <container_name>

静态代码分析

PHP insights被用于并提供应用程序源代码的静态代码分析报告。

运行工具

$ ./vendor/bin/phpinsights.bat

为您的源代码获取详细的报告

$ ./vendor/bin/phpinsights.bat analyse -v

配置规则

可以通过根目录中的phpinsights.php文件配置PHP insights的分析规则。

测试

PHP unit已设置并配置了两个测试套件:单元和集成。配置文件(phpunit.xml)位于根目录。

运行单元测试套件

$ ./vendor/bin/phpunit --configuration phpunit.xml --testsuite unit

运行集成测试套件

$ ./vendor/bin/phpunit --configuration phpunit.xml --testsuite integration