PHP 的项目结构


Project structure for PHP

我是PHP新手,想知道php项目的目录结构。我有Java的经验,在java中我们有src包含java源文件,WEB-INF包含lib和jsp页面。我们在 PHP 中是否有类似的标准目录结构?此外,我们在php中有分层,就像我们在java中有分层一样(例如Web,Service,DAO层)

我浏览了几个链接。但每个人都给出了不同的答案。

不确定我们是否可以比较这两种语言。我只是想坚持一些标准。

提前谢谢。

不。 PHP是你对它所做的。 它可以是非常简单的平面文件,也可以是您想要的任何内容。

话虽如此,有一些商定的编码标准,但没有"执行"这些标准。 它们被称为PSR(PHP标准推荐)。 这里有一个背景:http://net.tutsplus.com/tutorials/php/psr-huh/
您可以在此处逐一查看标准:http://www.php-fig.org/psr/

大多数主要框架都遵循这些标准,如果您要使用一个,则可能更容易遵循流程。

同样,每个框架、项目、插件、程序等都有不同的布局和不同的项目结构。 一个常见的结构是这样的:

-framework_dir
-public_html
    -js
    -img
    -css
    -index.php
    -protected/private
        -controllers
        -models
        -views
        -etc

然后,他们使用 .htaccess 文件阻止对受保护目录的访问。 同样,这只是我在几个框架中看到的常见表示。 如果你正在做一个个人项目,只需使用一些你觉得舒服的东西。 每个框架都会给你一个不同的库或访问数据的方式。 没有"层",但同样,每个框架都有处理不同区域(电子邮件、数据库、缓存、http、日志等)的对象。 因为有几十种流行的,所以由你来找到适合你的哲学或项目的东西。 观看一些 5 分钟的博客视频,看看有什么问题,然后对其进行几天的测试运行。 如果您不喜欢它,请切换到另一个。

随着Composer的发明,人们现在有一个中心位置来注册他们的项目供全世界使用,其他人现在可以查看该代码库并看到相似之处。

结果是这样的:https://github.com/php-pds/skeleton

总之:

如果包具有 的根级目录 那么它必须被命名
命令行可执行文件 .bin/
配置文件 配置/
文档文件 文档/
网络服务器文件 公共/
其他资源文件 资源/
PHP 源代码 来源/
测试代码 测试/

我倾向于为后端项目使用基于功能的文件夹结构。每个要素文件夹都有自己的控制器、管理器和路径文件。这适用于 API 后端。它看起来有点像 https://blog.nikolaposa.in.rs/2017/01/16/on-structuring-php-projects/

例如,我们有一个客户功能,其中包含CustomerController,CustomerRepository,CustomerRoutes,..

我的文件夹结构如下所示:

- build/
-- phpdox.xml
-- phpmd.xml
-- phpunit.dist.xml
- config/
- public/
-- .htaccess
-- index.php
-- assets/
- src/
-- Customer/
--- CustomerController.php
--- CustomerRepository.php
--- Customer.php
--- customer.routes.php
- tests/
- vendor/
composer.json
.gitignore

不幸的是(或者不是?)你对PHP非常自由。这取决于你。

这是我的结构:

framework/
controllers/             
models/
configs/
files/
templates/
themes/
tmp/
index.php
init.php
.htaccess

您可以通过 .htaccess 控制访问。

对于库,我使用以下结构...另外,我已经包含了我尚未使用的建议(尚未)

PROJECT ROOT
|--composer.json
|--README.md
|--docs //for documentation files
|--tests //for Unit Tests
|--vendor //for external libraries (if everything isn't included through composer)
|--examples //examples of the library being used
|--config //any configuration files you may have
|--src  //where the library's actual code "lives"
   |--php //php source code, classes, any other scripts
   |--View //html views, but actually php files that output html
   |--Style //contains .css files
   |--Script //contains .js files
   |--Res   //contains other deliverable resource files. Could be mp3 files, json etc

目前,我只在根文件中使用 composer.jsonREADME.mdsrc。但是当我到达这一点时,我可能会使用我所描述的其他方法。

我绝不认为这是"正确的"。这种设置之所以有效,是因为我在每个请求上都有一个 php 路由器。使用 .htaccess ,您可以将.css文件路由到 /src/Style/requested_file.css

我希望清理项目根目录,我已经做到了。PHP Fig 没有用于目录结构的 PSR...我知道的。我曾希望PSR-4,自动装载机会有一些标准,但是...不是真的,关于目录结构。

你可以看看laravel,wordpress,PHP Mailer和其他php库来查看示例,看看你最喜欢的是什么