2

我想获得由我在 CakePHP 3.2 中的测试触发的电子邮件中的完整 URL。我尝试了完整的选项$this->Html->image('image.jpg', ['fullBase' => true])$this->Url->build('/', true)但它们似乎在测试中不起作用。

测试时如何在电子邮件中强制使用完整的 URL?

4

1 回答 1

3

在 CLI 环境中运行应用程序时没有主机,因为它不是 Web 请求。您必须自己配置基本 URL。

从文档中引用:

App.fullBaseUrl

应用程序根的完全限定域名(包括协议)。这在生成绝对 URL 时使用。默认情况下,此值是使用$_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 核心测试套件也是这样做的。每当您不确定时,查看核心测试可能会给您一些提示。

也可以看看

于 2016-08-05T11:59:45.177 回答