cakedc搜索无法正常工作

时间:2013-09-25 16:28:53

标签: cakephp cakedc

我已经尝试了所有简单的cakedc搜索设置,并按照之前的帖子中的代码示例进行了操作,但它似乎似乎不适合我。我不确定,但似乎没有使用搜索字符串生成任何搜索查询,从我在我的数据库上运行的查询日志判断。

当我尝试搜索时,从/ books / search,我得不到我知道的数据库中的标题结果,并且URL更改为/ books / index / title:sweet(我不确定这是不是有关)。

非常感谢任何帮助。

模型     

public $actsAs = array('Search.Searchable');
public $primaryKey = 'isbn13';

public $hasMany = array(
    'Contributor' => array (
        'className' => 'Contributor',
        'foreignKey' => 'isbn13'
        ),
    'Override' => array (
        'className' => 'Override',
        'foreignKey' => 'isbn13'
        )

);

public $filterArgs = array(
        'title' => array('type' => 'query', 'method' => 'filterTitle'),
         'main_desc' => array('type' => 'value')
);

public function filterTitle($data, $field = null) {
        if (empty($data['title'])) {
            return array();
        }
        $titleField = '%' . $data['title'] . '%';
        return array(
            'OR' => array(
                $this->alias . '.title LIKE' => $titleField,
                ));
}

控制器

class BooksController extends AppController {
public $helpers = array ('Html', 'Form');
public $paginate = array();
public $components = array('Search.Prg');
public $presetVars = true; 

public function index() {
    //get books
    $this->set('books', $this->Book->find('all'));

    //search
   /* $this->Prg->commonProcess();
    $this->paginate['conditions'] = $this->Book->parseCriteria($this->Prg->parsedParams());
    $this->set('books');
   */
}

 public function search($books = NULL) {
    $this->Prg->commonProcess();
    $this->paginate['conditions'] = $this->Book->parseCriteria($this->passedArgs);
    $this->set('books', $this->paginate());
}

查看

<h1>Search Results</h1> 
<?php
     echo $this->Form->create('Book'   , array(
        'url' => array_merge(array('action' => 'search'), $this->params['pass'])
        ));

    echo $this->Form->input('title', array('div' => false, 'empty' => true)); // empty       creates blank option.

    echo $this->Form->submit(__('Search', true), array('div' => false));
    echo $this->Form->end();

路线

Router::connect('/', array('controller' => 'books', 'action' => 'index'));

Router::connect('/index/*', array('controller' => 'books', 'action' => 'search'
 )); 

Router::connect('/view/:url', array('controller' => 'books', 'action' => 'view', array('url' => '[\w\W]*')
 ));
Router::connect('/edit/:url', array('controller' => 'books', 'action' => 'edit', array('url' => '[\w\W]*')
 ));
Router::connect('/whatsnew/*', array('controller' => 'books', 'action' => 'whatsnew'
 ));
Router::connect('/search/*', array('controller' => 'books', 'action' => 'search'
 )); 

我已将search-master文件夹重命名为Search并将其放入我的plugins目录中并在我的bootstrap.php中加载了插件

CakePlugin::load('Search');  

1 个答案:

答案 0 :(得分:0)

固定!需要

$this->set('books', $this->paginate($this->Book->parseCriteria($this->passedArgs)));' 

而不是

$this->set('books', $this->paginate());'

在控制器中。不知道为什么虽然..