In Laravel, it is possible to detect whether the environment in which the system is running on production or local.
The app/start/local.php file
In the case of local development, we have the file called app/start/local.php
, which is only added to the application Laravel 4
if it is detected that the environment
(environment) is marked as "local"
.
It would be possible to define some routes there and, thus, they would work only when the application was in development.
An example:
#app/start/local.php
Route::group(['prefix' => 'local'], function ()
{
Route::get('login/{id}', function ($id)
{
$u = Usuario::findOrFail($id);
Auth::login($u);
return Redirect::to('/');
});
});
In this case, when accessing the route localhost/local/login/1
, we could authenticate a user in a simple way, without the need for a form. And this is something very useful for development to become more agile.
Methods for development environment detection
If there is a need to know in some piece of code that we are or are not in development environment, we have three ways to detect this, through methods present in Illuminate\Foundation\Application
.
Example 1:
var_dump(App::isLocal()); //bool(true);
var_dump(App::environment('local')); // bool(true)
var_dump(App::environment() === 'local')); // bool(true)
I don’t know if it depends on the version of Laravel 4
, but particularly like to use the first.
With this, it is possible to do the include
of debug functions, for example when we are in development.
Example:
#app/start/global.php
if (App::isLocal())
require app_path('local_functions.php');
Detecting the environment through the host used
It is also possible to define whether the application is in a local environment or not by simply checking the url
of origin of the same.
The way I always use is to add some lines of code to the file bootstrap/start.php
.
Thus:
$env = $app->detectEnvironment(function() use($app) {
$enviromentsHosts = [
'localhost',
'url_virtualhost',
];
if (in_array($app['request']->getHost(), $enviromentsHosts)) {
return 'local';
} else {
return 'production';
}
});