なぜ CakePHP はこれらの URL を生成するのですか?
<server>/Reporting/OnlineBanking/index/page:1
それ以外の
<server>/Reporting/OnlineBanking/index?page=1
たとえば、JavaScript からの相対パスを使用すると、多くの問題が発生します。
そして、それを変更するオプションはありますか?
デフォルトでは、CakePHP のすべてのパラメーターは名前付きパラメーターです ( のような URL フラグメント/foo:bar/
)。これは、デフォルトで、ページネーション引数にも適用されます。
ページネーション パラメータに get 引数を使用するには、適切な config を設定することで実行できます。
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
代わりに、絶対 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"
...