長くて可変のクエリ文字列と一緒にページネーションを使用すると、1 ページから 2 ページ、3 ページ、4 ページなどに移動する際に問題が発生します。ルーティングの問題だと思います。ユーザーが一連のドロップダウン メニューで選択するカスタム クエリを使用しています。結果の URL は非常に長く、すべての投稿変数が含まれています。
たとえば、実際の最初のページの URL は次のようになります (投稿変数は文字で表されています)。
project/web/s/search_results/t/u/v/w/x/y/z
...そして、ページ 2 がクリックされたときの非稼働の 2 ページ目の URL:
project/web/s/search_results?page=2
2 ページ目はルーティング ルールに従っています。前述のように、ページ 2 はページャー メニューからクリックしても機能しません。しかし、手動で入力すると:
project/web/s/search_results/t/u/v/w/x/y/z?page=2
-それは機能します。コードの重要な行は次のとおりです。
ルーティング ルール:
search_results:
url: /s/search_results
param: { module: s, action: search_results }
ページネーションの url_for ヘルパー:
<?php foreach ($pager->getLinks() as $page): ?>
<?php if ($page == $pager->getPage()): ?>
<?php echo $page ?>
<?php else: ?>
<a href="<?php echo url_for('@search_results', $object) ?>?page=<?php echo $page ?>"><?php echo $page ?></a>
<?php endif; ?>
<?php endforeach; ?>
そしてエラーメッセージ:
404 | Not Found | sfError404Exception
Unable to find the s object with the following parameters "array ( 'id' => 'search_results', 'sf_format' => 'html',)").
ルーティング ルールにコレクションを使用する必要がありますか?
編集: url_for ヘルパーで参照されるオブジェクト:
<?php foreach ($pager->getResults() as $o => $object): ?>