在Laravel 5中,应用程序URL的意义是什么?

23

在 Laravel 源代码中的 Config/app.php 文件中,url 的实际用途是什么?

它表示 artisan 命令行工具 使用的应用程序 URL,那么它应该是什么呢?

我的意思是,它应该是 http://mydomainname.com 还是 /var/www/laravel/ 或者 /var/www/laravel/public

当前配置

/*
|--------------------------------------------------------------------------
| 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://localhost/',

假设我的应用程序源代码位于/var/www/目录下,laravel公共文件夹为/var/www/laravel/public,并且http://mydomainname.com指向解析到/var/www/laravel/public目录。

使用案例:

我将从/app/Console/Kernel.php中使用laravel schedular,它将会调度periodic sendMail commands,然后在数据库中排队发送电子邮件,queue listner 会像平常一样处理队列。

本地主机上的队列正常工作(我的本地xamp服务器),但是我担心在生产环境中url值应该是什么?


如果当前的 url 设置为 localhost,则使用域名。 - Bankzilla
2个回答

38
当用户访问您的网站时,Laravel会从PHP的superglobals ($_SERVER, $_GET, $_POST等)中获取许多关于请求所需的信息。其中一部分信息是请求URL。例如,如果您访问请求方法url()或path(),这些信息是通过$_SERVER超级全局变量检索的。
$url = Request::url();
$path = Request::path();

然而,artisan、commands、jobs等不具备此信息的优势。它们不是来自用户的常规HTTP请求,而是从命令行运行的PHP命令。因此,Laravel需要一种方法来确定应用程序的URL应该是什么。这就是配置值发挥作用的地方。

在你的例子中,你计划从队列中发送电子邮件。想象一下,你需要在其中一个电子邮件中包含你网站的某个路由的链接,所以你使用UrlGenerator获取链接的URL (URL::route('route.name'))。由于这段代码在命令内部运行,与任何类型的HTTP请求都无关,基本应用程序URL将从你在config/app.php中设置的配置值中获取。

希望现在更清楚了,url值应该设置为应用程序的HTTP URL,而不是任何类型的目录路径。在你的例子中,应该是http://mydomainname.com


2
这是最好的答案,足够详细以便理解。谢谢 :-) - echoashu
1
我正在寻找有关Laravel配置参数的信息,这个答案非常完美。谢谢。 - Dario Corno
1
现在一切都有意义了。谢谢! - Staysee
如果我没有域名,只有服务器IP怎么办? - mercury
我本来想评论一下IP的。我使用局域网服务器,所以我使用IP地址,例如http://192.168.1.20。我还没有生成任何需要的内容,这就是为什么我在阅读这篇文章,我希望能找到更多关于它的信息,因为我认为这个主题不够清晰。我知道它是为了artisan而设计的,但除了电子邮件之外,这个应用程序还有哪些用途呢? - blamb

7

关于 .env 的想法,应用程序是否会自动获取生产 URL,因为我在 config/app.php 中找不到使用 ENV 变量的地方?无论如何,那个 URL 能用 :-) - echoashu
3
关于.env的想法,您可以在配置中设置值,如下所示:'url' => env('URL', 'http://localhost/')。如果您在.env文件中提供了一个URL值,那么url配置值将被设置为该值。如果您在.env文件中没有提供URL值,则 'url' 配置值将设置为传递给 env() 函数的默认值(在本例中为 'http://localhost/')。 - patricus
太好了!我在database.php和其他配置文件中看到了类似的逻辑,也有同样的想法。 话虽如此,我们可以将许多重要的静态常量存储在.env文件中,并使用env()函数访问它们?如果我错了,请纠正我。 - echoashu
2
@echoashu 是的,正确的。即使这是首选的方法。这样可以让您将敏感数据与版本控制分开。 - Almazik G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接