2015-02-05 2 views
1

Я установил новую копию Laravel.Laravel 5 Изменение среды для соответствия URL

Мне это нужно, поэтому я могу настроить среду на URL.

Так, например, в L4 я использовал это в файле start.php

$env = $app->detectEnvironment(function() 
{ 
    return isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''; 
}); 

Это то загруженным правильную среду для проекта, так что если мы имели локальный домен dev.laravel.com он будет загружаться в переменные окружения из dev.laravel.com

Я не могу сделать это в пределах Laravel 5.

Есть предположения, как я могу применить это?

+0

Прочтите документ http://laravel.com/docs/5.0/configuration#environment-configuration – astroanu

ответ

0

вы можете, например, сделать его для использования разные базы данных, то у вас есть несколько различных переменных на .env как:

DB_HOST=localhost 
DB_DATABASE=database1 
DB_USERNAME=foo 
DB_PASSWORD=foo 

DB_HOST_2=localhost 
DB_DATABASE_2=database2 
DB_USERNAME_2=foo 
DB_PASSWORD_2=foo 

и в конфигурации/dababase.php:

'connections' => [ 

     'mysql' => [ 
      'driver' => 'mysql', 
      'host'  => env('DB_HOST', 'localhost'), 
      'database' => env('DB_DATABASE', 'forge'), 
      'username' => env('DB_USERNAME', 'forge'), 
      'password' => env('DB_PASSWORD', ''), 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => false, 
     ], 

     'mysql2' => [ 
      'driver' => 'mysql', 
      'host'  => env('DB_HOST_2', 'localhost'), 
      'database' => env('DB_DATABASE_2', 'forge'), 
      'username' => env('DB_USERNAME_2', 'forge'), 
      'password' => env('DB_PASSWORD_2', ''), 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => false, 
     ], 

и, наконец, использовать:

Config::set('database.default', "mysql") or Config::set('database.default', "mysql2") 

в зависимости вам нужно ,

Например, я использую, чтобы изменить соединение с базой данных после пользователь авторизации делает это в контроллер абстрактного класса, изменив значение в зависимости сеанса вар, который изменяется после входа в систему в зависимости типа пользователя:

abstract class Controller extends BaseController { 

    use DispatchesCommands, ValidatesRequests; 

    public function __construct() 
    { 
     Config::set('database.default', Session::get('myapp.database','mysql')); 
    } 
} 

После входа в систему я поставленному измените это значение:

Session::set('myapp.database', 'mysql2') or Session::set('myapp.database', 'mysql') 

и в следующем вызове контроллера соединения с базой данных изменены.

+0

Можем ли мы сделать это для нескольких файлов окружения? поскольку я использую промежуточный сервер, и я хочу, чтобы иметь возможность выталкивать среду без необходимости вручную развертывать файл .env, прежде чем он начнет работать. – RavensGate

+0

Вы можете попробовать реализовать, например, параметр конфигурации, чтобы выбрать конфигурацию в зависимости от имени хоста или URL-адреса. Но если у вас разные серверы, вы должны использовать .env на каждом сервере с их конфигурацией. Но это тот же сервер с разными URL-адресами, которые вы можете попробовать. – carlituxman

+0

Дал этот ход, и он работает удивительно.Благодарю. Теперь мне не нужно развертывать конфигурации для каждого сервера. – RavensGate

0

Вы должны поместить .env файл в каждом из ваших условий - и поставить конкретные конфигурации для этих сред в файл .env

Так одна из среды вы можете поместить

APP_ENV=local 
APP_DEBUG=true 
DB_PASSWORD=secret 

и в другом .env на другой среде вы могли бы поместить

APP_ENV=staging 
APP_DEBUG=false 
DB_PASSWORD=other 
+0

Что вы подразумеваете под другой средой? Я хочу загрузить файлы diff .env в зависимости от производственной или локальной среды. Как мне это сделать? –

+0

, поэтому на вашем рабочем сервере у вас есть файл .env, и на вашем локальном сервере у вас есть другой файл .env. – Laurence

Смежные вопросы