2017-02-19 45 views
0

我沒有成功地將分頁與自定義查詢結合使用。我完全遵循文檔中的內容,但不起作用。重點是將記錄列表分頁,將標記「有效」設置爲「Y」或「N」。CakePHP 3:如何使用自定義分頁?

在控制器:

if (!isset($this->request->query['valid']) || $this->request->query['valid'] == '') 
    $allFilters['valid'] = 'N'; 
else 
    $allFilters['valid'] = 'Y'; 
$this->paginate = ['finder' => ['curnames' => $allFilters]]; 
$data = $this->paginate($this->Names)->toArray(); 

在模型:

public $paginate = ['finder' => 'curnames', 'limit' => 25, 'order' => ['Names.id' => 'asc']]; 

public function findCurnames(Query $query, array $options) { 
    $query->where([ 
    'valid' => $option['valid'] 
    ]); 
    return $query; 
} 

當我執行的代碼,我得到一個Cake\Network\Exception\NotFoundException例外。我錯過了什麼?

更新:版本是3.3。這是在執行時被觸發的錯誤:

$data = $this->paginate($this->Names)->toArray(); 

更新:在控制器中,我已經改線

$this->paginate = ['finder' => ['curnames' => $allFilters]]; 

$paginate = ['finder' => ['curnames' => $allFilters]]; 

和錯誤不會彈出了。但是,對「有效」=「Y」或「N」的條件過濾不予考慮。所以它仍然不起作用。

+0

接收錯誤無論何時,請務必上傳**的_complete_錯誤**,那就是**包括_full_ stacktrace **(理想情況下,以可正常讀取的方式從日誌中複製),即使問題對熟悉CakePHP的人員來說可能很明顯!還顯示/描述相應的上下文,即顯示/突出顯示實際觸發錯誤的代碼,並且請始終提及您的_exact_ CakePHP版本 - 謝謝!收集這些信息時,問題甚至會自行解決。 – ndm

+0

不要這樣做,請使用基於PRG模式的過濾方法,如[搜索](https://github.com/FriendsOfCake/search)。這個插件可以用少於三行的方式來完成同樣的事情,並且以後可以在上面添加更多的搜索過濾器。 – mark

回答

0

我得到了答案。錯誤來自錯字。正確的代碼應該是

'valid' => $options['valid'] 

帶's'的選項。 現在,它的工作。

0

是不是很容易做這樣的事情(沒有任何自定義查找方法):

if ($this->request->getQuery('valid', '') == '') 
    $valid = 'N'; 
else 
    $valid = 'Y'; 

$this->paginate = [ 
    'limit' => 25, 
    'order' => ['Names.id' => 'asc'] 
]; 
$query = $this->Names->find('all') 
    ->where([ 
    'valid' => $valid 
    ]); 
$data = $this->paginate($query)->toArray();