如何在分页中使用具有指定参数的路由

时间:2016-10-24 12:04:55

标签: cakephp cakephp-3.0

我有两条路线:一条路线,另一条路线非常具体。它们具有共同的控制器和动作,但特殊路径具有附加参数special

$routes->connect('/special_products', ['controller' => 'Products', 'action' => 'index', 'special' => 1]);
$routes->connect('/products', ['controller' => 'Products', 'action' => 'index']);

除了分页之外,这是按预期工作的。如果我在/special_products页面上并点击第2页,我会转到/products?page=2而不是预期的/special_products?page=2

如何更改路线或分页,以便special参数不会丢失?

2 个答案:

答案 0 :(得分:1)

我建议您使用搜索插件,而不是编写自己的控制逻辑。最受欢迎的两个是:

正确配置后,您可以使用查询字符串将参数传递给您的操作。

您的路线看起来像

$routes->connect('/special_products', [
    'controller' => 'Products', 
    'action' => 'index',
    '?' => ['special' => 1]
]);

答案 1 :(得分:0)

现在尝试添加$this->Paginator->options(['url' => $paginateUrl]),您可以在页面之间传递参数

这里有一个简单的例子

<强> index.ctp

<?= $this->Paginator->options(['url' => $paginateUrl]) ?>
<?= $this->Paginator->prev('< ' . __('previous')) ?>
<?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next(__('next') . ' >') ?>

<强>的ProductsController

public function index()
{
    ...
    if($this->request->param('special')) {

        $paginateUrl = ['special' => 1];

    }
    $this->set('paginateUrl', isset($paginateUrl) ? $paginateUrl : []);
    ...
}