我在PHP开始一个家庭网站项目,我打算用3层架构来做。但是我在这种架构中找不到任何关于文件夹结构的标准/偏好的信息。我工作的地方使用的文件夹结构是这样的:
(文件夹被夹住)
- 管理>
- 包括
- auth.php
page1 - index . php
所以page2 - index . php
- 包括
- css
- style.css
- js
- jquery-ui-10.4.0定制
- javascript.js
- responsive_gs
- global.php 头
- 页脚
自由> - bll
- class1.bll.php
- class2.bll.php
- class3.php
木豆 - class1.dal.php
- 包括
- auth.php
page1 - index . php
所以page2 - index . php
- 包括
- index . php
并且感觉非常可维护。但是在我开始这个项目之前,我还是想听听大家的意见。
这个问题被搁置了,因为它显然无法用客观的方式回答。我很抱歉,我以为在这件事上有一些行业标准。它看起来不像PSR-0或PSR-4工作得很好,你可以在这里阅读更多关于PSR的信息。我认为PSR-0或PSR-4应该得到实践,因为它允许您在轻松创建代码的同时完成模块化的文件夹结构,其他人和您都可以重复使用,所需的设置最少。
通过识别应用程序的核心组件,我开始为项目创建文件夹结构。例如,使用登录系统进行身份验证、注册、发送密码提醒等是很常见的……一旦我心中有了一个模块,我就创建一个或多或少遵循以下模式的编写器包:
src/
Assets/
css/
js/
less/
sass/
Controllers/
AuthController.php
UserController.php
Repositories/
UserRepository.php
Services/
Views/
partials/
login.blade.php
status-menu.blade.php
password/
recover.blade.php
reset.blade.php
MyServiceProvider.php
routes.php
composer.json
为了让composer自动加载您的名称空间,您需要指定符合PSR-0或PSR-4的路径。例如,在我的login
包上面我的作曲家。Json文件看起来像这样:
{
"name": "robert/login",
"description": "description",
"authors": [
{
"name": "Robert Stanfield",
"email": "your@email.com"
}
],
"require": {
"php": ">=5.4.0"
},
"autoload": {
"psr-4": {
"Robert''Login''": "src/"
}
},
"minimum-stability": "stable"
}
注意自动加载部分的psr-4行…您可以通过composer文档查看更多信息。
现在我把所有的代码放在一个版本控制系统,如SVN或GIT,所以我可以在任何其他项目中使用它。
你的主要项目可以是一个锅炉板项目,可以在项目之间重用…像这样:
composer.json
index.php
public/
vendor/
现在你可能想要创建一个Core
包或一些类似的名称,包含你的应用程序的特定代码,不能在其他项目中使用。
你的index.php
文件看起来像这样:
// Use composer's autoloader
require('vendor/autoload.php');
// Code to handle loading all your service providers...
// maybe have like an array of service providers and then foreach over them...
现在我可以简单地使用UserRepository类,例如通过编写以下代码:
use Robert'Login'Repositories'UserRepository;
class UserController
{
protected $userRepo;
public function __construct(UserRepository $repo)
{
$this->userRepo = $repo;
}
public function showInactiveUsers()
{
$users = $this->userRepo->getInactiveUsers();
// TODO: generate $view
return $view;
}
}
请记住,您可以使用composer在自己的包中要求包,因此解耦代码应该没有问题。通过使用composer,您可以相对轻松地获得使用PHP社区已经创建的包的额外好处。
主项目的composer.json
文件应该需要你创建的包…例如,如果我的登录包位于git://example.com/robert/login.git
{
"minimum-stability": "stable",
"repositories": [
{
"type": "git",
"url": "git://example.com/robert/login.git"
}
],
"require": {
"robert/login": "dev-master"
}
}
Composer可以安装任何版本的包…你也可以在composer文档中了解更多,它基本上与你的标签和分支名称一起工作:)
您将需要创建一个程序来编译和/或缩小您的资产,并将它们放在公共文件夹中。这减少了HTTP请求,并在纯JavaScript或CSS的情况下减少了带宽。您可以使用诸如gulp之类的工具来完成此任务。
希望我涵盖了所有…这是一个相当大的想法,但一个简单的:)