繁体   English   中英

PHP 的项目结构

[英]Project structure for PHP

我是 PHP 新手,想知道 php 项目的目录结构。 我有 Java 方面的经验,在 Java 中我们有 src 包含 java 源文件,WEB-INF 包含 lib 和 jsp 页面。 我们在 PHP 中有任何类似的标准目录结构吗? 我们在 php 中是否也有分层,就像我们在 java 中有层一样(例如 Web、服务、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

简而言之:

If a package has a root-level directory for ...
                            ... then it MUST be named:
command-line executables    bin/
configuration files         config/
documentation files         docs/
web server files            public/
other resource files        resources/
PHP source code             src/
test code                   tests/

该标准没有进一步建议哪些目录必须存在于srcpublic之下。

在任何这些目录中组织 PHP 源文件的任务仍然取决于您,但本文中列出一些我同意的建议:按类型(控制器、实体、服务)排序,或按功能排序(用户、登录、购物车、目录、文章、评论)——后者将属于一个功能的所有代码保存在目录(或几个子目录)中,这通常似乎是更好的文件组织方式。

按类型组织时,您会发现自己经常在目录之间跳转,而且您无法很好地了解代码的内容——您总是有“控制器”,但很少有“StampCollection”。

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

例如,我们有一个带有 CustomerController、CustomerRepository、CustomerRoutes 的 Customer 特性。

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

- 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、自动加载器会有一些标准,但是……在目录结构方面并非如此。

您可以查看laravelwordpressPHP Mailer其他 php 库以查看示例并了解您最喜欢的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM