Php Laravel:根据域名设置常量/变量

Php Laravel:根据域名设置常量/变量,php,laravel,domain-name,Php,Laravel,Domain Name,我正在构建一个应用程序,它有多个链接到它的域名,以及基于这些域名并链接到这些域名的不同前端视图/网站 现在,我想根据域名设置一些变量,并使它们在我的控制器和应用程序逻辑中可用 例如,不同前端的所有视图都存储在基于域名(ziv、dbg、dbe)的不同文件夹中。比如说,如果用户通过example.com访问应用程序,则必须设置一个变量,以便加载的视图来自文件夹“exm”。它看起来是这样的: View::make('frontend.' . $folderVariable . '.home')->

我正在构建一个应用程序,它有多个链接到它的域名,以及基于这些域名并链接到这些域名的不同前端视图/网站

现在,我想根据域名设置一些变量,并使它们在我的控制器和应用程序逻辑中可用

例如,不同前端的所有视图都存储在基于域名(ziv、dbg、dbe)的不同文件夹中。比如说,如果用户通过example.com访问应用程序,则必须设置一个变量,以便加载的视图来自文件夹“exm”。它看起来是这样的:

View::make('frontend.' . $folderVariable . '.home')->with('info', $info);
<?php

namespace App\Http\Middleware;

use Closure;

class DetectDomainMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if($_SERVER['SERVER_NAME'] == 'example.com')
        {
          define('domain', 'exm');
        }
        elseif($_SERVER['SERVER_NAME'] == 'example-B.com')
        {
          define('domain', 'B');
        }


        return $next($request);
    }
}
我的问题是:我应该把这样的代码放在哪里

它应该在引导文件中,还是在所有其他控制器将继承的基础控制器中?我需要整个应用程序中的域名信息,所以需要提前加载


提前谢谢

考虑使用服务类来处理当前域,并返回一个适当的字符串以与
View::make()
方法一起使用

或者扩展视图类
\illumb\Support\Facades\View
,以覆盖
视图::make()
,或者创建另一个自动插入相关字符串的方法。也可以选择使用服务提供商

服务类示例-它不需要服务提供者(取决于实现)


然后,您将在需要执行特定于域的函数的位置插入此类。例如-BaseController,View功能扩展(您可以创建
View::domainMake()
,只需使用给定的值调用服务类。

您可以创建如下中间件:

View::make('frontend.' . $folderVariable . '.home')->with('info', $info);
<?php

namespace App\Http\Middleware;

use Closure;

class DetectDomainMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if($_SERVER['SERVER_NAME'] == 'example.com')
        {
          define('domain', 'exm');
        }
        elseif($_SERVER['SERVER_NAME'] == 'example-B.com')
        {
          define('domain', 'B');
        }


        return $next($request);
    }
}

在我的项目中,我已经将其放置在基本控制器中。但不确定这是否是最好的方法。在Laravel 4.2中,您可以在位于
/App/filters.php的
App:before()
中执行此操作。使用
View::share()
使其在整个视图或
Config::set()中可用
让它在任何地方都可用。因此,在ServiceProvider引导方法中,我会放置一些逻辑来检查域并设置一些变量。例如,我如何在控制器中访问这些变量?这是一个不错的解决方案,但它仅用于视图。我还希望能够根据域n从配置文件加载不同的API键ame。因此,我希望域变量在整个应用程序中都可以访问,而不仅仅是视图。您认为将此逻辑放在基本控制器的公共函数中,并在基本控制器构造函数中加载该方法更适合我想要的功能吗?还是这不是最佳解决方案?扩展控制器是一个选项,但如果您在应用程序的不同部分需要该功能,该怎么办?使用服务类意味着您可以将该类放置在应用程序中的任何位置,并重用它,同时使其易于测试。然后,您可以在可扩展控制器和视图扩展方法中使用该服务类。I如果你之前没有使用过服务类,那么看看吧,这里有很多教程。因此,你建议创建一个服务提供商来检查域名上的逻辑并在其中设置变量?那么我将如何访问变量?我不会谴责它只是“支持”.我广泛使用它们来开发。你是对的。我应该从一开始就提到依赖注入。
View::make('frontend.' . domain . '.home')->with('info', $info);