我正在尝试为Laravel 4.1应用程序构建一种方法,该应用程序旨在运行多个基本上执行相同操作的域,以基于域加载不同的模板。最重要的是,我还必须能够像任何其他单站点Laravel设置一样配置多个环境(dev,qa,stage,live)。
首先,我们已经为每个环境运行并配置了Laravel 4.1实例。所以这件事很好。我们使用它来替换使用Java和PHP奇怪混合构建的旧系列网站(不要问,这是一场噩梦)。
由于这些网站中的每一个都做了完全相同的事情(他们有主页,常见问题解答,联系我们,政策页面,多步骤申请表和用户门户网站),我们看不到使用的重点一个重复的代码库并单独维护每个代码库(因为这是针对具有不同名称的5个不同外观的站点)。
所以我的任务是为每个站点创建一个新模板,看起来与旧的模板相同(现在)但是在Laravel中并且从相同的代码库运行。我正在使用Bootstrap和Basset这样做。第一个模板适用于Bootstrap和Basset(从自定义LESS文件为每个站点构建自定义CSS集)。我能够让模板测试页面加载得很好。
这是棘手的部分。我需要根据域名(myfirstdomain.com vs myseconddomain.com)切换我们正在提取视图的模板文件夹,同时能够切换环境(dev,qa,stage和live)。环境由特定于环境的current_mode文件设置,而不是检入存储库。这很好用。但我们需要能够检测域段(myfirstdomain,名称的myseconddomain部分),然后使用它来设置要使用的views子文件夹。
我打算将每个模板的名称命名为相同(页眉,页脚,侧边栏等)。导航会有所不同。其他方面可能有所不同分享一个共同的布局会很不错,但是在这一点上我会对模板文件夹切换感到满意。
我与其他开发人员讨论过使用命名空间,只是检测和切换视图。但我不确定这是怎么回事。我不确定哪里可以找到最好的地方。我也不确定切换/设置模板/命名空间的最佳方法。
有没有人尝试做过这样的事情?有没有人有任何想法?
答案 0 :(得分:2)
我认为在这种情况下你不需要命名你的视图命名空间,你可以添加到你的app / start / global.php这样的东西:
switch (Request::server('HTTP_HOST')) {
case 'myfirstdomain.com':
$viewPath = 'one'
break;
case 'myseconddomain.com':
$viewPath = 'two'
break;
}
Config::set('view.paths', [__DIR__.'/../views/'.$viewPath]);
您的观点必须在
中app/views/one/*
app/views/two/*
或者只是
Config::set('view.paths', [__DIR__.'/../views/'.Request::server('HTTP_HOST')]);
您必须将模板添加到:
app/views/myfirstdomain.com/*
app/views/myseconddomain.com/*
您还可以直接在app / config / view.php中添加一些代码:
'paths' => array(__DIR__.'/../views/'.Request::server('HTTP_HOST')),
正如评论中的OP所指出的,您还可以添加路径位置:
View::addLocation($path);
将命名空间连接到路径:
View::addNamespace('company', $path);.
如果你想使用公司模板,现在就必须这样做:
return View::make('company::layout.default');