作曲家供应商/路径

时间:2015-04-09 15:37:12

标签: php security composer-php

如在网络上的任何地方所述,webroot文件夹应该只包含一个入口点(index.php)和assets文件夹。应用程序源代码必须放在上面的目录中,不能访问网站。

由于我将使用相同的应用程序使用多个域名,因此我做了类似的事情:

drwxrwxr-x 7 teo teo 4096 Apr  9 16:43 app
-rw-rw-r-- 1 teo teo  334 Apr  9 14:51 composer.json
-rw-rw-r-- 1 teo teo 9213 Apr  9 14:51 composer.lock
-rw-rw-r-- 1 teo teo 1965 Apr  9 13:01 deploy.ant
lrwxrwxrwx 1 teo teo   12 Apr  7 19:28 webroot2 -> app/webroot/
lrwxrwxrwx 1 teo teo   12 Apr  7 19:28 webroot3 -> app/webroot/
lrwxrwxrwx 1 teo teo   12 Apr  7 19:28 public_html -> app/webroot/
drwxrwxr-x 8 teo teo 4096 Apr  9 14:51 vendor

每个webroot文件夹只是文件夹app/webroot的相对链接:

rwxrwxr-x 6 teo teo 4096 Apr  7 19:27 assets
-rw-r--r-- 1 teo teo 1406 Apr  9 16:02 index.php

然后我在Composer中添加了一个包(maximebf/debugbar),我发现使其运行的唯一方法是将其资产包含在webroot中。

所以我在vendor中添加了app/webroot的链接:

drwxrwxr-x 6 teo teo 4096 Apr  7 19:27 assets
-rw-r--r-- 1 teo teo 1406 Apr  9 16:02 index.php
lrwxrwxrwx 1 teo teo   13 Apr  7 23:49 vendor -> ../../vendor/

我想:如果有人可以访问开源软件包的源代码,那就不会受到伤害......


然后我开始编写我的第一堂课,但我无法弄清楚我应该把代码放在哪里:

  • 如果我把它放在app/的子文件夹中(我计划放置它), Composer不会在自动加载器中插入它的命名空间;
  • 如果我说的话 在vendor/子文件夹中,它将在webroot内链接。

我确定我错过了一些东西,但我无法想象......

1 个答案:

答案 0 :(得分:1)

在您的公共Web文件夹中,保留系统条目文件,例如index.php和您的资源,如CSS,JS等。

在父文件夹中保留您的供应商/和您的应用程序/(您的类)文件夹。

在供应商/你不能放任何东西,这个文件夹是由作曲家自动生成的,所以当你更新作曲家所有你在供应商写的代码被覆盖时,它是可能的,不要修改任何东西这个文件夹。

因此,您的目录结构必须类似于:

  • 应用程序/
  • 供应商/
  • 网/
  • composer.json
  • ...

现在,composer为您提供了一个自动加载器。那么如何使用呢?

在你的composer.json文件中:

{
    "require": {
        "example/example": "~1.0"
    },
    "autoload" : {
        "psr-4": {
          "YourAppNamespace\\": "app"
        }
    }
}

所以现在让我们打开例如

app/controller/myclass.php
app/model/mymodel.php

代码:

<?php 

namespace YourAppNamespace\controller;

use example\example\something; // vendor/example/example/something.php
use YourAppNamespace\model\mymodel; // app/model/mymodel.php

Composer支持多个名称空间加载。 有关该主题的更多信息,请访问: https://getcomposer.org/doc/01-basic-usage.md#autoloading

当您更改composer.json文件中的自动加载部分以运行时,不要忘记

php composer.phar dump-autoload