Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-Artisan提供了错误的基本url_Php_Laravel_Laravel 4 - Fatal编程技术网

Php Laravel-Artisan提供了错误的基本url

Php Laravel-Artisan提供了错误的基本url,php,laravel,laravel-4,Php,Laravel,Laravel 4,我的app/config/app.php 'url' => 'http://dev.domain.com/something/somethingElse' 然后我有一个函数,可以从应用程序调用,也可以从artisan命令调用。但是URL::route('myRoute')返回不同的结果。从应用程序调用时,它返回http://dev.domain.com/something/somethingElse/myRoute,但在artisan命令中http://dev.domain.com/my

我的app/config/app.php

'url' => 'http://dev.domain.com/something/somethingElse'
然后我有一个函数,可以从应用程序调用,也可以从artisan命令调用。但是
URL::route('myRoute')
返回不同的结果。从应用程序调用时,它返回
http://dev.domain.com/something/somethingElse/myRoute
,但在artisan命令中
http://dev.domain.com/myRoute

URL::to
具有相同的行为

注意:我没有为其他环境定义任何可能覆盖全局的app.php文件

你知道为什么会这样吗?
谢谢

Laravel生成的URL由许多部分组成:

  • 方案:
    http://
    https://
  • 主机:
    dev.domain.com
    localhost
  • Base:
    somethingese/somethingese
    (web服务器上的子目录)
  • 尾部:
    myRoute
    ,(Laravel路线参数)
然后将这些部分连接起来形成URL

最后,Laravel使用
$\u服务器
请求变量生成URL。
Symfony\Component\HttpFoundation\Request
中的函数
prepareBaseUrl()
最终用于确定URL的部分

当您通过web浏览器发出请求时,请求将转到
~/public/index.php
,必要的
$\u服务器
变量将填充正确的信息,以便Laravel填充URL的基本部分

但是,当您在命令行上使用Artisan发出请求时,请求将转到
~/Artisan
脚本。这意味着
$\u服务器
变量的填充方式不同,并且Laravel无法确定URL的部分;相反,它返回一个空字符串
'

据我所知,Laravel团队似乎没有兴趣让应用程序在子目录中开箱即用地运行,例如

我最终以@medollock描述的方式解决了这个问题,我的脚本将从命令行调用,例如:

Config::get('app.url')。URL::route('route.name',['parameter'=>'value'],false)


这将连接
app/config/app.php中设置的应用程序URL和相对URL路由。

如果使用Laravel 4.2,可以调用
URL::forceRootUrl
函数来显式定义Laravel应用程序的根URL

URL::forceRootUrl( Config::get('app.url') );
URL::to
的调用将在强制根URL后使用应用程序配置文件中定义的URL


不幸的是,这在Laravel 4.1或Laravel 4.0中不可用。另一种可行的方法是使用Config::get('app.url')。我可以将其放在哪里,以便在我的应用程序中全局应用?顺便说一句,我使用的是L5.1,看起来像这样,理论上它仍然可以工作。至于要放在哪里,这取决于您的用例。最初,我之所以需要它,是因为我正在编写一个自定义artisan命令,该命令需要生成一封带有网站链接的电子邮件。如果您的需求非常具体,我建议您将其放在命令或控制器中。如果要为整个应用程序设置它,可以尝试将routes.php文件放入其中。也许有更好的地方可以考虑。谢谢大家。我决定将它放在我的AppServiceProvider中的boot()方法中。谢谢你解释这一点,它帮助我更好地理解了Laravel是如何处理请求的。如果不是这样的话,我很可能只是在任何发生事情的地方盲目地粘贴代码。