我是 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
简而言之:
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/
本标准未就哪些目录必须存在于以下src
或public
.
在这些目录中组织 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.json
、README.md
和。src
但是当我到达那一点时,我可能会使用我所描述的其他人。
我绝不认为这是“正确的”。这个设置之所以有效,是因为我对每个请求都有一个 php 路由器。使用,您可以将文件.htaccess
路由到..css
/src/Style/requested_file.css
我希望清理项目根目录,我已经实现了。PHP Fig没有目录结构的PSR ......我知道。我曾希望PSR-4,自动加载器会有一些标准,但......不是真的,关于目录结构。
您可以查看laravel、wordpress、PHP Mailer和其他 php 库以查看示例并查看您可能最喜欢的内容