Laravel-Artisan给出了错误的基础url


Laravel - Artisan gives wrong base url

我的app/config/app.php有

'url' => 'http://dev.domain.com/something/somethingElse'

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

CCD_ 4具有相同的行为。

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

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

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

  • 方案:http://https://
  • 主机:dev.domain.comlocalhost
  • Base:something/somethingElse(web服务器上的子目录)
  • 尾:myRoute,(Laravel路由参数)

然后将这些部分连接起来形成URL。

最终,Laravel使用$_SERVER请求变量生成URL。Symfony'Component'HttpFoundation'Request中的函数prepareBaseUrl()最终用于确定URL的部分。

当您通过web浏览器发出请求时,请求将转到~/public/index.php,并且必要的$_SERVER变量将填充Laravel的正确信息,以填充URL的部分。

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

据我所知,Laravel团队似乎没有任何兴趣让应用程序在子目录中开箱即用,例如Bugfix:子文件夹的域路由。

我最终以@medowlock描述的方式处理了我的脚本,这些脚本将从命令行调用,例如:

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后,对URL::to的调用将使用应用程序配置文件中定义的URL。

不幸的是,这在Laravel 4.1或Laravel 4.0 中不可用