流明基础 url 在 Controller 和 Job 中不同

Lumen base url is different in a Controller and a Job

我有一个控制器,其中 URL::to('/') returns 我网站的基础 url。但是,当我在作业中使用 URL::to('/') 时,它 returns 只有一个冒号作为字符串 (":")。

class MyJob extends Job {
    public function handle() {
        Log::info(URL::to('/'));
    }
}

这个returns"http://:"

class MyController extends Controller { {
    public function myMethod() {
        Log::info(URL::to('/'));
    }
}

这个returns"http://my_domain.com"

我无法理解这一点。我应该只在 .env 中保存基础 url 并使用它吗?

我正在使用 beanstalkd 作为队列。

自然地 UrlGenerator class 从 Request 实例 https://github.com/laravel/lumen-framework/blob/5.0/src/Routing/UrlGenerator.php#L289 中获取基础 url,而当您 运行 时该实例不存在您在 CLI 环境中的工作人员。

因此,要么将基础 url 存储在您的 .env 文件中,要么在您发送它时将其传递给您的工作。

$app->get('/job', function() use ($app) {
    $app['Illuminate\Contracts\Bus\Dispatcher']->dispatch(new MyJob(url('/')));
});

MyJob.php

class MyJob extends Job
{
    private $base_url;

    public function __construct($base_url)
    {
        $this->base_url = $base_url;
    }

    public function handle()
    {
        app()['log']->info($this->base_url);
    }
}