我想使用子域设置本地化。我已经设法建立子域名通配符,它工作正常。但是我想设置过滤器。 例如,我在考虑在配置中设置一系列可用国家/地区:
<?php
return array(
'available' => array(
'uk',
'fr',
'de'
)
);
然后在我的路线中,我需要一种过滤组的方法。目前我的代码如下,没有任何过滤器:
<?php
$homeController = 'MembersController@profile';
if ( ! Sentry::check())
{
$homeController = 'HomeController@index';
}
Route::group(['domain' => '{locale}.'.Config::get('app.base_address')], function() use ($homeController)
{
Route::get('/', ['as' => 'home', 'uses' => $homeController]);
Route::post('users/register', ['as' => 'register', 'uses' => 'UsersController@register']);
Route::resource('users', 'UsersController');
});
有没有人有任何过滤该组的想法?
此外,如果子域无效,我如何重定向到uk.domainname.com之类的内容?
提前感谢您的帮助,非常感谢。
答案 0 :(得分:1)
您可以使用过滤器在路线中解决此问题,该过滤器将首先执行。然后检查可用的子域,如果找不到,则重定向到默认的子域。
Route::filter('subdomain', function()
{
$subdomain = current(explode('.', Request::url()));
if (!in_array($subdomain, Config::get('app.countries.available'))) {
return Redirect::to(Config::get('app.default_subdomain') . '.' . Config::get('app.base_address'));
}
});
Route::group(['before' => 'subdomain'], function()
{
...
}
答案 1 :(得分:1)
在你的app/filters.php
我会写这样的东西。您将在配置中使用子域数组创建名为availableSubdomains
的新变量。
<?php
Route::filter('check_subdomain', function()
{
$subdomain = Route::getCurrentRoute()->getParameter('subdomain');
if (!in_array($subdomain, Config::get('app.availableSubdomains')))
return Redirect::home();
});
然后我会在app/routes.php
<?php
Route::group(
['domain' => '{locale}.'.Config::get('app.base_address'),
'before' => 'check_subdomain']
, function() use ($homeController)
{
Route::get('/', ['as' => 'home', 'uses' => $homeController]);
Route::post('users/register', ['as' => 'register', 'uses' => 'UsersController@register']);
Route::resource('users', 'UsersController');
});
抱歉,我还没有测试过它。
答案 2 :(得分:0)
对于子域名,其中语言标识符是子域名的第一部分,例如:en.domain.com/section这里是我用于laravel 5.1的内容
这使用了getHost,避免了http / https首次出现的问题
应用\ HTTP \ routes.php文件:
Route::filter('subdomain', function() { $locale_url = current(explode('.', Request::getHost())); if (!in_array($locale_url, Config::get('app.countries_available'))) { return Redirect::to(Config::get('app.default_subdomain') . '.' . Config::get('app.base_address')); } App::setLocale($locale_url); });
有必要添加以下内容:
config/app.php: 'countries_available' => ['en','es'],
找到变量
最后,将其添加到路线
应用\ HTTP \ routes.php文件:
Route::group(['before' => 'subdomain'], function() { Route::get('/', 'control@func'); ... });