我想获得由CakePHP 3.2中的测试触发的电子邮件中的完整URL。我尝试使用$this->Html->image('image.jpg', ['fullBase' => true])
和$this->Url->build('/', true)
的完整选项,但它们似乎无法在测试中使用。
如何在测试时强制电子邮件中的完整网址?
答案 0 :(得分:2)
在CLI环境中运行应用程序时没有主机,因为它不是Web请求。您必须自己配置基本URL。
来自文档的引用:
<强> App.fullBaseUrl 强>
完全合格的域名(包括协议) 到您的应用程序的根目录。这在生成绝对时使用 网址。默认情况下,使用
$_SERVER
生成此值 环境。但是,您应手动定义它以进行优化 表现或者如果你担心人们操纵Host
头。在CLI上下文(来自shell)中,无法读取fullBaseUrl
来自$_SERVER
,因为没有涉及网络服务器。你需要 如果您确实需要从shell生成URL(例如,请自行指定) 发送电子邮件时。)
因此,您可以通过App.fullBaseUrl
Configure::write('App.fullBaseUrl', 'http://localhost');
或更具体一点,以便它仅适用于路由器,通过Router::fullBaseUrl()
Router::fullBaseUrl('http://localhost');
您可以在应用程序配置(config/app.php
)中对其进行配置,这样即使在常规Web请求中,您的应用也不会动态构建它,因此也可以在测试环境中使用它,或者,如果您只想申请测试套件,请将其放在测试引导程序(tests/bootstrap.php
)中以使其全局应用,或将其设置在您的测试用例文件中。
这就是CakePHP核心测试套件正在做的事情。每当你不确定时,看看核心测试可能会给你一个提示。
另见