【问题标题】:How to make a controller's method unavailable to Codeigniter's previous_url()如何使控制器的方法对 Codeigniter 的 previous_url() 不可用
【发布时间】:2021-10-06 11:02:25
【问题描述】:

我正在以控制器方法在我的脚本上动态生成一个 javascript 文件,并将这个动态生成的脚本添加到我的 html 中,就像您使用常规 javascript 一样。

在我的 php 代码中我返回

return $this->response
    ->setBody($data)
    ->setHeader('text/javascript')
    ->noCache()
    ->getBody();

$data 是一个变量,用于保存生成的 javascript 文件中的数据。 到目前为止一切正常,直到我想使用 codeigniter 内置的 previous_url() 函数然后我被带到这个 javascript 文件文件而不是以前的网页。

到目前为止,我已经尝试破解 CI 核心并且它有效。我所做的是 return false 在 Codeigniter.php 的 storePreviousURL() 方法中,如果 Cache-control 响应标头包含 no-cacheno-store 值,我使用生成器中的内置 CI $response->no_cache() 方法设置脚本。

我想知道是否有更好的方法来解决这个问题,我个人也建议不要破解内核,但我似乎没有选择。

【问题讨论】:

  • 为什么不在视图中的<script> 标记之间直接使用echo $data 而不是生成文件?
  • 我可以这样做,但是该文件是在控制器中生成的,并且取决于我不想带入视图的许多其他组件,我试图让我的代码看起来像可能。
  • echo $data
  • 问题不在于回显字符串结果,如何防止 php 将 url 存储到 $_SERVER['HTTP_REFERER'] 中生成的脚本标签中,而无需破解 codeigniter 核心,因为它在脚本标签中不应被视为已访问链接,我可以回显结果但我不想。
  • 恕我直言,有时核心 hack 是值得的 - 这是 PHP / CI 的伟大之处 - 如果某些东西不起作用,我们可以访问它。我的建议 - 记录你所做的更改,这样如果你更新到新版本的 CI,你就会知道你需要重新编码什么。

标签: javascript php codeigniter http-headers codeigniter-4


【解决方案1】:

我遇到了类似的问题,我创建了一个图像服务器来提供动态大小的缩略图,然后该图像 url 将成为以后需要它的任何东西的 previous url。现在我正在使用推荐的方式来改变核心的工作方式,而不是真正改变核心代码:使用Events。看来问题已经解决了。

我在提供文件的方法中添加了这段代码:

$prevurl=previous_url(); //a function from the url helper
\CodeIgniter\Events\Events::on('post_system',function() use ($prevurl){
    \Config\Services::codeigniter()->storePreviousURL(\Config\Services::uri($prevurl,false));
});

这会将之前的 url 重置为调用此方法之前(即请求此 url 之前)的任何值。

【讨论】:

  • post_system 事件是默认系统事件还是您正在传播的事件以及何时触发?
猜你喜欢
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多