我是Symfony的新手,有一个问题。
我想将供应商文件夹移到当前目录之外(Symfony 4.3)。
因此,从此默认结构开始:
/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
我还尝试了另一种方法:
我没有更改主机上的默认文件夹结构,如解决方案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/