默认URL与Javascript相对路径

时间:2013-07-15 11:55:16

标签: php url cakephp

为什么CakePHP会生成这些网址

<server>/Reporting/OnlineBanking/index/page:1

而不是

<server>/Reporting/OnlineBanking/index?page=1

例如,使用JavaScript的相对路径会有很多麻烦。

是否可以选择更改它?

1 个答案:

答案 0 :(得分:1)

使用get参数分页

默认情况下,CakePHP中的所有参数都是命名参数(url片段如/foo:bar/)。默认情况下,这也适用于分页参数。

要为分页参数使用get参数 - 您可以通过setting appropriate config

执行此操作
public $paginate = array(
    'paramType' => 'querystring'
);

这将生成以下形式的网址:

/the/url?page=1&limit=10

而不是:

/the/url/page:1/limit:10

将网址指定为string非常脆弱

之前您提到在javascript中使用get_backend_requests等网址。

即使使用分页参数,如果你这样做,仍会发现问题。这是因为即使对于“相同”的网址,结果也可能不同:

/the/url  => /the/get_backend_requests
/the/url/ => /the/url/get_backend_requests

相反 - 在javascript中将网址指定为绝对网址:

$.ajax({
    type: 'POST',                               
    url: "/xyz/get_backend_requests",
    ...

如果您的应用程序有时(或始终)安装在子文件夹中,您可以使用简单的功能来解释它:

e.g。在你的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"
    ...