我想获得由我在 CakePHP 3.2 中的测试触发的电子邮件中的完整 URL。我尝试了完整的选项$this->Html->image('image.jpg', ['fullBase' => true])
,$this->Url->build('/', true)
但它们似乎在测试中不起作用。
测试时如何在电子邮件中强制使用完整的 URL?
我想获得由我在 CakePHP 3.2 中的测试触发的电子邮件中的完整 URL。我尝试了完整的选项$this->Html->image('image.jpg', ['fullBase' => true])
,$this->Url->build('/', true)
但它们似乎在测试中不起作用。
测试时如何在电子邮件中强制使用完整的 URL?
在 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 核心测试套件也是这样做的。每当您不确定时,查看核心测试可能会给您一些提示。
也可以看看