在 Laravel 4.2 Artisan 命令中更改应用程序 url
Changing the app url inside a Laravel 4.2 Artisan command
我 运行 一个内置于 Laravel 4.2 的多租户站点。在 App 配置中,我知道您可以设置一个基数 URL,例如
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => 'http://apples.local',
我已经构建了一个 Artisan 命令来向用户发送预定的电子邮件,无论他们通过哪个域访问网站。因此该命令需要生成具有不同域的 urls,例如http://oranges.local
.
在我的命令中,我试图在生成 URL 之前更改 app.url
配置变量,但它似乎没有影响:
Config::set('app.url', 'http://oranges.local');
$this->info('App URL: ' . Config::get('app.url'));
$this->info('Generated:' . URL::route('someRoute', ['foo', 'bar']));
尽管在 运行 时物理上改变了配置,这仍然总是产生:
App URL: http://oranges.local
Generated: http://apples.local/foo/bar
URL 生成器完全忽略了应用程序配置!
我知道我可以设置多个环境并将 --env=oranges
传递给 Artisan,但在我的用例中这并不实用。我只希望能够在 运行 时间内在整个站点范围内设置应用程序 url。
有什么想法吗?
URL::route()
calls $route->domain()
which gets the domain from $route->action['domain']
/**
* Get the domain defined for the route.
*
* @return string|null
*/
public function domain()
{
return isset($this->action['domain']) ? $this->action['domain'] : null;
}
所以它看起来不像是使用 Config::get('app.url')
来设置 url。
benJ 似乎有一个好主意。你为什么不手动写 URL?
$emailURL = Config::get('app.url') . '/foo/bar/'
收工吧。
好的,whoacowboy 是对的,根本没有考虑配置。我发现该站点的基础 URL(即使在 Artisan 命令中)似乎从 Symphony Request 对象一直返回。
因此,对于 change/spoof Artisan 中的域,以下将起作用:
Request::instance()->headers->set('host', 'oranges.local');
完成更改后再次还原主机名可能是明智的,但至少在我的用例中,这解决了我所有的问题!
我 运行 一个内置于 Laravel 4.2 的多租户站点。在 App 配置中,我知道您可以设置一个基数 URL,例如
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => 'http://apples.local',
我已经构建了一个 Artisan 命令来向用户发送预定的电子邮件,无论他们通过哪个域访问网站。因此该命令需要生成具有不同域的 urls,例如http://oranges.local
.
在我的命令中,我试图在生成 URL 之前更改 app.url
配置变量,但它似乎没有影响:
Config::set('app.url', 'http://oranges.local');
$this->info('App URL: ' . Config::get('app.url'));
$this->info('Generated:' . URL::route('someRoute', ['foo', 'bar']));
尽管在 运行 时物理上改变了配置,这仍然总是产生:
App URL: http://oranges.local
Generated: http://apples.local/foo/bar
URL 生成器完全忽略了应用程序配置!
我知道我可以设置多个环境并将 --env=oranges
传递给 Artisan,但在我的用例中这并不实用。我只希望能够在 运行 时间内在整个站点范围内设置应用程序 url。
有什么想法吗?
URL::route()
calls $route->domain()
which gets the domain from $route->action['domain']
/**
* Get the domain defined for the route.
*
* @return string|null
*/
public function domain()
{
return isset($this->action['domain']) ? $this->action['domain'] : null;
}
所以它看起来不像是使用 Config::get('app.url')
来设置 url。
benJ 似乎有一个好主意。你为什么不手动写 URL?
$emailURL = Config::get('app.url') . '/foo/bar/'
收工吧。
好的,whoacowboy 是对的,根本没有考虑配置。我发现该站点的基础 URL(即使在 Artisan 命令中)似乎从 Symphony Request 对象一直返回。
因此,对于 change/spoof Artisan 中的域,以下将起作用:
Request::instance()->headers->set('host', 'oranges.local');
完成更改后再次还原主机名可能是明智的,但至少在我的用例中,这解决了我所有的问题!