1

なぜ CakePHP はこれらの URL を生成するのですか?

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

それ以外の

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

たとえば、JavaScript からの相対パスを使用すると、多くの問題が発生します。

そして、それを変更するオプションはありますか?

4

1 に答える 1

1

パラメータを取得したページネーション

デフォルトでは、CakePHP のすべてのパラメーターは名前付きパラメーターです ( のような URL フラグメント/foo:bar/)。これは、デフォルトで、ページネーション引数にも適用されます。

ページネーション パラメータに get 引数を使用するには、適切な config を設定することで実行できます。

public $paginate = array(
    'paramType' => 'querystring'
);

これにより、次の形式の URL が生成されます。

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

それ以外の:

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

URL を指定するのstringは非常に脆弱です

get_backend_requests以前、javascriptのような URL の使用について言及しました。

ページネーションの get 引数を使用しても、それを行うと問題が発生します。これは、「同じ」URL であっても、結果が異なる可能性があるためです。

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

代わりに、絶対 URL として JavaScript で 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"
    ...
于 2013-07-16T11:05:39.973 に答える