如何在一个控制器中引用另一个控制器?在CI 3中(例如在controller client.php中),我解决了这个问题,如下所示:
redirect('/Clients', 'refresh');
但在CI 4中似乎不再起作用。“反向路由时无法找到路由。”)我也尝试了
redirect()->route('/Clients');
但误差是相同的。
redirect()->to('/Clients');
不重定向到任何地方(无输出,无任何内容)
为了更好地理解:我想使用控制器(例如客户端/创建到客户端/详细信息)
2条答案
按热度按时间fcwjkofz1#
您应该注意到
redirect()
并不像在CI 3中那样只设置头,在CI 4中它返回一个RedirectResponse对象,您可以使用该对象请求控制器进行重定向。要做到这一点,你需要在你的控制器中return这个RedirectResponse对象。没有return语句,重定向就不会发生。
另一件需要注意的事情是,
redirect()
可以通过一些“选项”来调用:前往命名路由
或
要使用此功能,您需要在
app/Config/Routes.php
文件中添加一个命名路由:转到特定URI
它会将您重定向到末尾带有 /Clients 的基本URL。
请查看文档以了解更多信息:https://codeigniter.com/user_guide/general/common_functions.html#redirect
wwodge7n2#
Codeingiter 4文档对此并不十分清楚。它们并没有给你提供所有不同的重定向选项。我不会开始这里一一列举,但要找到更多的选项,请查看system-〉HTTP目录中的大多数文件都有可以使用redirect()函数的函数,主要是ResponseTrait.php文件。
例如,要进行重定向,并且如果您想立即发送标头,可以执行以下操作:
例如,如果您有一个扩展了另一个控制器的控制器,并且父控制器可以从浏览器访问该控制器,请尝试使用以下命令:
它可能不起作用,因为路由是返回到父控制器的对象。如果在父控制器中返回它,则它将起作用。(即)