为什么 CakePHP 会生成这些 URL
<server>/Reporting/OnlineBanking/index/page:1
代替
<server>/Reporting/OnlineBanking/index?page=1
例如,使用 JavaScript 中的相对路径会带来很多麻烦。
有没有改变它的选项?
默认情况下,CakePHP 中的所有参数都是命名参数(如 url 片段/foo:bar/
)。默认情况下,这也适用于分页参数。
要为分页参数使用 get 参数 - 您可以通过设置适当的配置来做到这一点:
public $paginate = array(
'paramType' => 'querystring'
);
这将生成以下形式的 url:
/the/url?page=1&limit=10
代替:
/the/url/page:1/limit:10
string
非常脆弱之前您提到get_backend_requests
过在 javascript 中使用 url。
如果你这样做,即使使用分页的 get 参数,你仍然会发现问题。那是因为即使对于“相同”的 url,结果也可能不同:
/the/url => /the/get_backend_requests
/the/url/ => /the/url/get_backend_requests
相反 - 将 javascript 中的 url 指定为绝对 url:
$.ajax({
type: 'POST',
url: "/xyz/get_backend_requests",
...
如果您的应用程序有时(或总是)安装在子文件夹中,您可以通过一个简单的函数来解决这个问题:
例如在你的 html/layout 中:
<html>
...
<script>
function url(url) {
return <?php
$base = rtrim(Router::url('/'), '/');
if ($base) {
echo "'$base' + ";
}
?>url;
}
</script>
这将输出:
<html>
...
<script>
function url(url) {
return '/subfolder' + url;
}
</script>
$.ajax({
type: 'POST',
url: url("/xyz/get_backend_requests"), // becomes the string "/subfolder/xyz/get_backend_requests"
...