Laravel 多域设置
Laravel Multi domain Setup
我想在我的 laravel 5.1 中设置多个域。
我有 3 个不同的域
www.domain1.com
www.domain2.com
www.domain3.com
每个域都有一些共同的功能和一些不同的功能但主题不同
我想要这样的视图结构
resource/www.domain1.com
resource/www.domain2.com
resource/www.domain3.com
i am unable to separate views how can i achieve this?
**
您应该创建中间件来修改查看文件夹的路径:
namespace App\Http\Middleware;
use Closure;
use Illuminate\View\FileViewFinder;
use Illuminate\Support\Facades\View;
class ModifyViewFolder
{
public function handle($request, Closure $next)
{
$finder = new FileViewFinder(app()['files'], [
app_path('../resources/views/' . $request->server->get('HTTP_HOST')),
app_path('../resources/views/'),
]);
View::setFinder($finder);
return $next($request);
}
}
然后在您的 Kernel.php
中注册它。如果域特定文件夹中的视图不存在,这将回退到默认文件夹。
我知道这个 post 相当古老,但与所有事情一样 Laravel,做任何事情的方法不止一种。我能够通过这样覆盖 ViewServiceProvider 来实现这种效果。但是,此解决方案将适用于整个站点,因为接受的答案将允许您将模板应用于网络组。
class
TemplateServiceProvider extends ViewServiceProvider
{
/**
* Register the view finder implementation.
*
* @return void
*/
public function registerViewFinder()
{
$this->app->bind('view.finder', function ($app) {
$paths = [];
/*
* Pull our template from our site name
*/
$template = Template::where('domain', Request::server('SERVER_NAME'))->first();
if($template)
{
$paths = [
$app['config']['view.paths.templates'] . DIRECTORY_SEPARATOR . $template->tag
];
}
/*
* Default view path is ALWAYS last
*/
$paths[] = $app['config']['view.paths.default'];
return new FileViewFinder($app['files'], $paths);
});
}
}
你可以毫不费力地使用这个包Gecce Multi Domain
安装
添加 gecche/laravel-multidomain 作为对 composer.json 的要求:
{
"require": {
"gecche/laravel-multidomain": "4.*"
}
}
使用 composer update 更新您的包或使用 composer install 安装。
您还可以使用 composer require gecche/laravel-multidomain 添加包,然后指定您想要的版本(目前,dev-v1.1.* 是您最好的选择)。
此程序包需要在 bootstrap 进程开始时覆盖最小的一组 Laravel 核心函数中的 HTTP 域检测,以便获取特定的环境文件。所以这个包比大多数 Laravel 包需要更多的配置步骤。
安装步骤:
通过修改 bootstrap/app.php 文件最顶部的以下行来替换整个 Laravel 容器。
//$app = new Illuminate\Foundation\Application(
$app = new Gecche\Multidomain\Foundation\Application(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
更新两个应用程序内核(HTTP 和 CLI)。
在 app/Http/Kernel.php 文件的最顶部,进行以下更改:
//use Illuminate\Foundation\Http\Kernel as HttpKernel;
use Gecche\Multidomain\Foundation\Http\Kernel as HttpKernel;
类似地在 app/Console/Kernel.php 文件中:
//use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Gecche\Multidomain\Foundation\Console\Kernel as ConsoleKernel;
用 config/app.php 文件中 $providers 数组中的扩展服务提供商覆盖 QueueServiceProvider:
//Illuminate\Queue\QueueServiceProvider::class,
Gecche\Multidomain\Queue\QueueServiceProvider::class,
发布配置文件。
php artisan vendor:publish
(这个包使用了发现功能。)
按照上述步骤,您的应用程序将知道 运行 所在的 HTTP 域,包括队列支持的 HTTP 和 CLI 请求。
用法
此软件包添加了三个命令来管理您的应用程序 HTTP 域:
domain.add artisan command
主要命令是 domain:add 命令,它将要添加到应用程序的 HTTP 域的名称作为参数。假设我们有两个域,site1.com 和 site2.com,共享相同的代码。
我们只做:
php artisan domain:add site1.com
和
php artisan domain:add site2.com
这些命令创建了两个新的环境文件,.env.site1.com 和 .env.site2.com,您可以在其中放置每个站点的特定配置(例如数据库配置、缓存配置和其他配置,通常在环境文件中找到)。
该命令还在 config/domains.php 文件的域键中添加了一个条目。
此外,还创建了两个新文件夹,storage/site1_com/ 和 storage/site2_com/。它们具有与主存储相同的文件夹结构。
对此存储子结构的自定义必须与 config/domain.php 文件中的值相匹配。
domain.remove artisan 命令
domain:remove 命令通过删除其环境文件从应用程序中删除指定的 HTTP 域。例如:
php artisan domain:remove site2.com
我想在我的 laravel 5.1 中设置多个域。
我有 3 个不同的域
www.domain1.com
www.domain2.com
www.domain3.com
每个域都有一些共同的功能和一些不同的功能但主题不同
我想要这样的视图结构
resource/www.domain1.com
resource/www.domain2.com
resource/www.domain3.com
i am unable to separate views how can i achieve this?
**
您应该创建中间件来修改查看文件夹的路径:
namespace App\Http\Middleware;
use Closure;
use Illuminate\View\FileViewFinder;
use Illuminate\Support\Facades\View;
class ModifyViewFolder
{
public function handle($request, Closure $next)
{
$finder = new FileViewFinder(app()['files'], [
app_path('../resources/views/' . $request->server->get('HTTP_HOST')),
app_path('../resources/views/'),
]);
View::setFinder($finder);
return $next($request);
}
}
然后在您的 Kernel.php
中注册它。如果域特定文件夹中的视图不存在,这将回退到默认文件夹。
我知道这个 post 相当古老,但与所有事情一样 Laravel,做任何事情的方法不止一种。我能够通过这样覆盖 ViewServiceProvider 来实现这种效果。但是,此解决方案将适用于整个站点,因为接受的答案将允许您将模板应用于网络组。
class
TemplateServiceProvider extends ViewServiceProvider
{
/**
* Register the view finder implementation.
*
* @return void
*/
public function registerViewFinder()
{
$this->app->bind('view.finder', function ($app) {
$paths = [];
/*
* Pull our template from our site name
*/
$template = Template::where('domain', Request::server('SERVER_NAME'))->first();
if($template)
{
$paths = [
$app['config']['view.paths.templates'] . DIRECTORY_SEPARATOR . $template->tag
];
}
/*
* Default view path is ALWAYS last
*/
$paths[] = $app['config']['view.paths.default'];
return new FileViewFinder($app['files'], $paths);
});
}
}
你可以毫不费力地使用这个包Gecce Multi Domain
安装 添加 gecche/laravel-multidomain 作为对 composer.json 的要求:
{
"require": {
"gecche/laravel-multidomain": "4.*"
}
}
使用 composer update 更新您的包或使用 composer install 安装。
您还可以使用 composer require gecche/laravel-multidomain 添加包,然后指定您想要的版本(目前,dev-v1.1.* 是您最好的选择)。
此程序包需要在 bootstrap 进程开始时覆盖最小的一组 Laravel 核心函数中的 HTTP 域检测,以便获取特定的环境文件。所以这个包比大多数 Laravel 包需要更多的配置步骤。
安装步骤:
通过修改 bootstrap/app.php 文件最顶部的以下行来替换整个 Laravel 容器。
//$app = new Illuminate\Foundation\Application(
$app = new Gecche\Multidomain\Foundation\Application(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
更新两个应用程序内核(HTTP 和 CLI)。 在 app/Http/Kernel.php 文件的最顶部,进行以下更改:
//use Illuminate\Foundation\Http\Kernel as HttpKernel;
use Gecche\Multidomain\Foundation\Http\Kernel as HttpKernel;
类似地在 app/Console/Kernel.php 文件中:
//use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Gecche\Multidomain\Foundation\Console\Kernel as ConsoleKernel;
用 config/app.php 文件中 $providers 数组中的扩展服务提供商覆盖 QueueServiceProvider: //Illuminate\Queue\QueueServiceProvider::class, Gecche\Multidomain\Queue\QueueServiceProvider::class, 发布配置文件。
php artisan vendor:publish
(这个包使用了发现功能。)
按照上述步骤,您的应用程序将知道 运行 所在的 HTTP 域,包括队列支持的 HTTP 和 CLI 请求。
用法 此软件包添加了三个命令来管理您的应用程序 HTTP 域:
domain.add artisan command
主要命令是 domain:add 命令,它将要添加到应用程序的 HTTP 域的名称作为参数。假设我们有两个域,site1.com 和 site2.com,共享相同的代码。
我们只做:
php artisan domain:add site1.com
和
php artisan domain:add site2.com
这些命令创建了两个新的环境文件,.env.site1.com 和 .env.site2.com,您可以在其中放置每个站点的特定配置(例如数据库配置、缓存配置和其他配置,通常在环境文件中找到)。
该命令还在 config/domains.php 文件的域键中添加了一个条目。
此外,还创建了两个新文件夹,storage/site1_com/ 和 storage/site2_com/。它们具有与主存储相同的文件夹结构。
对此存储子结构的自定义必须与 config/domain.php 文件中的值相匹配。
domain.remove artisan 命令 domain:remove 命令通过删除其环境文件从应用程序中删除指定的 HTTP 域。例如:
php artisan domain:remove site2.com