gpt4 book ai didi

php - 如何在删除选定查询参数的同时使用 cakephp 重建 url?

转载 作者:搜寻专家 更新时间:2023-10-31 21:11:37 25 4
gpt4 key购买 nike

我正在使用 CakePHP 2.4

我有一个网址,例如/sent?note=123&test=abc

我想删除 note 参数,同时将 url 的其余部分还给我。即

/sent?test=abc

我有一段代码可以工作,但只适用于查询参数。 我想了解如何改进我的代码,使其适用于:

  1. 命名参数
  2. 传递的参数
  3. 话题标签

例如

/sent/name1:value1?note=123&test=abc#top

这是我到目前为止编写的代码。 https://github.com/simkimsia/UtilityComponents/blob/master/Controller/Component/RequestExtrasHandlerComponent.php#L79

更新第三部分:

让我用更多的例子来说明我所说的更通用的答案是什么意思。

更通用的答案应该假设没有关于 url 模式的先验知识。

假设给定这个 url

/sent/name1:value1?note=123&test=abc

我只想去掉查询参数note然后返回

/sent/name1:value1?test=abc

更通用的解决方案应该可以返回这个 url。

另一个例子。这次是为了摆脱命名参数。

假设再次给出这个 url

/sent/name1:value1?note=123&test=abc

我想摆脱 name1 并返回:

/sent?note=123&test=abc

再一次,更通用的解决方案也应该能够实现这一点。

更新第二部分:

我正在寻找更通用的答案。假设 web 应用程序不知道 url 被称为已发送。您也不知道查询参数是否包含单词 note 或 test。我如何仍然完成上述任务?

我希望能够对任何操作使用相同的代码。这样,我就可以将它打包成一个组件,以便轻松地重复使用。

更新第一部分:

我知道主题标签不会传递给 PHP。所以请忽略它。

关于如何从主题标签中获取值的线索:

最佳答案

使用 mod_rewrite 怎么样?

您可以用其他方式处理您的 URL:

<IfModule mod_rewrite.c>  
RewriteEngine on
RewriteRule ^/sent/name:(.*)?note=(.*)&test=([az-AZ])(#(.*))$ /sent/name:$1/note:$2/test:$3$4
</IfModule>

我不确定正则表达式,但这可能会以一种干净的方式将变量传递给 cakePHP(不过我还没有测试过)

[编辑]

但是如果你想在不知道 urls 模式的情况下工作,那么你可以使用 $this->request 数组:使用像

这样的 URL
action/id:10/test:sample?sothertest=othersample&lorem=ipsum

我可以在我的 Controller 中使用它获取所有参数:

// In your controller's method
$arguments= array_merge_recursive($this->request->named,$this->request->query);

然后,$arguments 将是一个包含命名参数和传递参数的数组:

array(
'id' => '10',
'test' => 'sample',
'sothertest' => 'othersample',
'lorem' => 'ipsum'
)

更好吗?

[编辑 2]如果您知道必须删除哪个参数,并直接重定向到新的 URL,这应该可行:

action/id:10/test:sample?knownParam=value&lorem=ipsum

或与

action/id:10/knownParam:value?othertest=othersample&lorem=ipsum

在您的 Controller /appController 操作中:

    // Name of the known param
$knownParam = 'knownParam';
// Arguments
$arguments = array_merge_recursive($this->request->named, $this->request->query);
if (key_exists($knownParam, $arguments)) {
// Unset in named params:
unset($arguments[$knownParam]);
// Creating url:
$url = array(
'admin' => $this->request->params['prefix'],
'plugin' => $this->request->params['plugin'],
'controller' => $this->request->params['controller'],
'action' => $this->request->params['action']
);
// Adding args
foreach ($arguments as $k => $v) {
$url[$k] = $v;
}
// Redirect
$this->redirect($url);
}

这会将两个 url 重定向到

action/id:10/param1:value1/param2:value2

没有“知道参数”...

关于php - 如何在删除选定查询参数的同时使用 cakephp 重建 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18489315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com