英文:
Laravel not getting the APP_URL parameter when we try to use url function inside the blade file
问题
url()
返回的 URL 是 http:
,但它应该是 https:
。
系统运行在 Docker 容器内。
我已运行了所有清除缓存、视图、路由的命令,甚至运行了 optimize
命令。
有人能建议我配置有什么问题吗?或者有什么方法可以解决这个问题?
我需要 {{ url('') }}
返回 .env
文件中的 APP_URL
。
英文:
I'm facing a weird situation, just look at the following code in a blade file, and the output of it
Blade
{{ url('xero_invoice_authorised') }}</br>
config app url - {{ config('app.url') }}</br>
env app url - {{ env('APP_URL') }}
Output
http://xxxx/xero_invoice_authorised
config app url - https://xxxx/
env app url - https://xxxx/
url()
is returning the URL as http:
but it should be https:
.
The system is inside a docker container.
I have run all commands to clear the cache, view, routes, and even ran optimize
command.
Can anyone suggest to me what's wrong with my configuration? or any method to rectify this issue?
I need {{ url('') }}
to return the APP_URL
in the .env
file.
答案1
得分: 2
没有任何错误,它按预期工作。
首先,永远不要在config
文件夹之外使用env()
,因为当你运行php artisan optimize
或php artisan config:cache
时,env()
将始终返回null
。更多信息请参阅文档。我理解如果这只是一个测试,但请牢记这一点。
其次,url()
将始终返回http
而不是https
。如果你想要https
,你必须使用secure_url()
。查看url()
和secure_url()
的文档。
第三,只是为了向你展示它是如何工作的,这里是url()
的官方源代码,UrlGenerator
是处理http://
或https://
的部分,你可以尝试调试它正在读取什么以及为什么它在使用不安全的选项而不是另一个选项。
英文:
There is no error at all, it is working as expected.
First of all, never use env()
outside the config
folder, because when you run php artisan optimize
or php artisan config:cache
, env()
will always return null
. More info in the documentation. I understand if this is just a test, but have it always in mind.
Second, url()
will ALWAYS return http
instead of https
. You have to use secure_url()
if you want https
. Check the documentation for url()
and secure_url()
.
Third, just to show you how it works, here is the official source code of url()
, the UrlGenerator
is the one processing the http://
or https://
, you can try debugging what it is reading and checking why it is using insecure instead of the other one.
答案2
得分: 0
I updated the AppServiceProvider with the following to force HTTPS on the production environment.
File: app/Providers/AppServiceProvider.php
public function boot()
{
if (env('APP_ENV') === 'production') {
URL::forceScheme('https');
}
}
英文:
After different tryouts found a working method
I updated the AppServiceProvider with the following to force the HTTPS on production environment.
File : app/Providers/AppServiceProvider.php
public function boot()
{
if (env('APP_ENV') === 'production') {
URL::forceScheme('https');
}
}
答案3
得分: 0
Sure, here is the translated content:
除了在配置文件中使用env()之外,请不要在任何地方使用它;一旦配置被缓存,.env 中将不再可用。
如果AMP是第三方服务,请将密钥放入 config/services.php:
// config/services.php
<?php
return [
// ...
'amp' => [
'key' => env('AMP_KEY'),
],
],
然后在视图中:
<meta name="amp_key" content="{{ config('services.amp.key') }}">
英文:
Don't use env() anywhere except in your con fig files; once config has been cached, there will be nothing available from .env.
If AMP is a third party service, then put the key into config/services.php:
// config/services.php
<?php
return [
// ...
'amp' => [
'key' => env('AMP_KEY'),
],
],
Then in the view:
<meta name="amp_key" content="{{ config('services.amp.key') }}">
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论