将Symfony供应商文件夹移到项目外

时间:2019-07-02 06:55:32

标签: php symfony docker

我是Symfony的新手,有一个问题。

我想将供应商文件夹移到当前目录之外(Symfony 4.3)。

解决方案#1

因此,从此默认结构开始:

/bin
/config
/public
...
/vendor
composer.json
...

此结构:

/vendor
/web
    /bin
    /config
    /public
    ...
    composer.json

我根据本文(https://symfony.com/doc/current/configuration/override_dir_structure.html#override-the-vendor-directory)编辑了composer.json文件 对此:

"config": {
    "vendor-dir": "../vendor",
    ...
},

并且我已从/config/bootstrap.php中替换了autoload.php的路径

require dirname(__DIR__).'/vendor/autoload.php';

对此

require dirname(__DIR__).'/../vendor/autoload.php';

然后我跑了composer install

../ vendor / autoload.php 文件可从 /config/bootstrap.php 访问(并成功包含)。我已经测试过了。

但是,如果我加载页面,Symfony将返回此异常:

(1/1) ClassNotFoundException

Attempted to load class "Kernel" from namespace "App".
Did you forget a "use" statement for "Symfony\Component\HttpKernel\Kernel"?
in index.php line 23

解决方案#2

我还尝试了另一种方法:

我没有更改主机上的默认文件夹结构,如解决方案1所示。 但是在构建容器之后,我将供应商文件夹上移了一层。 因此,从 / var / www / html / (即Symfony项目文件所在的位置)中,将其移至 / var / www /

然后,我删除了 / var / www / html / vendor / 文件夹,并创建了指向该文件夹一级的符号链接

rm /var/www/html/vendor
ln -s /var/www/vendor /var/www/html/vendor

所以容器内部的结构是这样的:

/var/www/vendor/
/var/www/html/bin/
/var/www/html/config/
/var/www/html/public/  # this is project´s document root
/var/www/html/vendor -> /var/www/vendor/ # symlink 
....

但是仍然没有运气,并且应用程序抛出相同的错误。

还有什么要做的吗?

我要移动文件夹的原因是因为我的应用程序在Windows的docker容器中运行,并且使用默认的Symfony文件夹结构(当/ vendor文件夹是共享安装的一部分时),网站运行非常缓慢。

我受到启发的

相关问题

Symfony 4 is painfully slow in DEV

https://github.com/maxpou/docker-symfony/issues/53

http://blog.michaelperrin.fr/2017/04/14/docker-for-mac-on-a-symfony-app/

0 个答案:

没有答案