Получить поддомен в поддомене-маршрут (Laravel)
Я создаю приложение, в котором поддомен указывает на пользователя. Как я могу получить поддомен-часть адреса в другом месте, чем в маршруте?
Route::group(array('domain' => '{subdomain}.project.dev'), function() {
Route::get('foo', function($subdomain) {
// Here I can access $subdomain
});
// How can I get $subdomain here?
});
Я построил грязную работу вокруг, хотя:
Route::bind('subdomain', function($subdomain) {
// Use IoC to store the variable for use anywhere
App::bindIf('subdomain', function($app) use($subdomain) {
return $subdomain;
});
// We are technically replacing the subdomain-variable
// However, we don't need to change it
return $subdomain;
});
причина, по которой я хочу использовать переменную вне маршрута,-это установить соединение с базой данных на основе этой переменной.
5 ответов
сразу после этот вопрос был задан, Laravel реализовал новый метод для получения поддомена внутри кода маршрутизации. Его можно использовать так:
Route::group(array('domain' => '{subdomain}.project.dev'), function() {
Route::get('foo', function($subdomain) {
// Here I can access $subdomain
});
$subdomain = Route::input('subdomain');
});
См. Раздел "Доступ К Значению Параметра Маршрута"в документах.
$subdomain
вводится в фактическое Route
обратный вызов, он не определен внутри group
закрытие, потому что Request
еще не был проанализирован.
Я не понимаю, почему вам нужно, чтобы он был доступен внутри закрытия группы но вне фактического Route
обратный.
если вы хотите, чтобы он был доступен везде, как только Request
был проанализирован, вы можете настроить фильтр after для хранения $subdomain
значение:
Config::set('request.subdomain', Route::getCurrentRoute()->getParameter('subdomain'));
обновление: применение группового фильтра для настройки подключения к базе данных.
Route::filter('set_subdomain_db', function($route, $request)
{
//set your $db here based on $route or $request information.
//set it to a config for example, so it si available in all
//the routes this filter is applied to
Config::set('request.subdomain', 'subdomain_here');
Config::set('request.db', 'db_conn_here');
});
Route::group(array(
'domain' => '{subdomain}.project.dev',
'before' => 'set_subdomain_db'
), function() {
Route::get('foo', function() {
Config::get('request.subdomain');
});
Route::get('bar', function() {
Config::get('request.subdomain');
Config::get('request.db');
});
});
попробуйте это, потому что все способы abouve не работают в Laravel 5.4
$domain = array_first(explode('.', \Request::getHost()));
в маршруте называют
$route = Route::getCurrentRoute();
и теперь у вас должен быть доступ ко всему, что имеет маршрут. Т. е.
$route = Route::getCurrentRoute();
$subdomain = $route->getParameter('subdomain');
вы можете сделать так для laravel 5:
public function methodName(Request $request) {
$subDomain = $request->route()->parameter('subdomain');
}