我的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.com
、localhost
等 - 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 中不可用