Laravel 5.X一个实例多个应用

时间:2015-09-02 17:28:23

标签: php laravel-5 composer-php

我希望设置一个laravel实例并运行多个应用程序。每个应用程序都有自己的命名空间,包括自定义路由,配置,资产,视图和自己的composer.json。所有应用程序将共享相同的供应商文件。 这就是我到目前为止所做的。 创建了多个名称空间,这就是每个应用程序目录结构的样子

 |--app
    |--App1
       |-- app
       |-- Bootstrap
       |-- config
       |-- database 
       |-- public
       |-- resources
       |-- storage
       |-- ..  
       |-- composer.json
    |-- App2
       |--..
 |--vendor

解决供应商依赖关系我在composer.json中更改了供应商文件夹位置,就像这样

"config": {
    "preferred-install": "dist",
    "vendor-dir":"../vendor"
}

我还更新了autoload.php中的供应商路径以指向正确的位置。

我正在设置这个项目的环境,也运行其他laravel项目。所以所有的成分都在那里(htaccess,vhosts,....)。

当我运行composer dump-autoload时,一切都加载我没有错误。当我导航到我的路线时,我得到一个空白页面。 App debug设置为true。

我以这种方式设置laravel的方法是否正确?如果是的话我哪里出错或者我做错了什么 非常感谢。

在我从下面的评论中得到一点提示后,我能够进行设置工作。 1 - 确保存储权限设置为775可写。 2 - 确保您已创建.env文件。在我的情况下,必须创建它,确实转移。

我的vhosts

<VirtualHost *:80>
    ServerName app1.server.local
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/tenants/app1/public
    <Directory /var/www/tenants/app1/public/>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


<VirtualHost *:80>
    ServerName app2.server.local
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/tenants/app2/public
    <Directory /var/www/tenants/app2/public/>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

希望这有助于任何想要设置一个laravel实例并运行多个应用程序的人。

2 个答案:

答案 0 :(得分:0)

蒂姆的评论指出我错过了什么。我将存储文件夹权限更改为775。 我添加了.env文件。和Booya,我有多个应用程序,只有一个laravel实例。 它就像一个魅力。

答案 1 :(得分:0)

对于Laravel 5、6和7 +

添加新的供应商文件夹配置后:

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

然后运行composer update

然后您需要更改两个文件:

  1. 对于您的应用:public/index.php

    require __DIR__.'/../../vendor/autoload.php';

  2. 您的工匠命令位于根文件夹:artisan

    require __DIR__.'/../vendor/autoload.php';

  3. Illuminate\Foundation\PackageManifest中的包裹自动发现:

    $this->vendorPath = $basePath.'/../vendor'; //Change this line in constructor

然后重新运行

php artisan package:discover --ansi