如在网络上的任何地方所述,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内链接。我确定我错过了一些东西,但我无法想象......
答案 0 :(得分:1)
在您的公共Web文件夹中,保留系统条目文件,例如index.php和您的资源,如CSS,JS等。
在父文件夹中保留您的供应商/和您的应用程序/(您的类)文件夹。
在供应商/你不能放任何东西,这个文件夹是由作曲家自动生成的,所以当你更新作曲家所有你在供应商写的代码被覆盖时,它是可能的,不要修改任何东西这个文件夹。
因此,您的目录结构必须类似于:
现在,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