CakePHP在主页中进行搜索

时间:2014-03-12 13:34:09

标签: cakephp search cakephp-2.4

我想知道如何在我的主页上搜索属性等内容。

我正在尝试理解这个概念并查看了多个网站,但我仍然无法理解如何做到这一点。

我所需要的只是推动正确的方向。我需要所有与例如x模型和搜索相关的案例。虽然我的搜索是从家里搜索财产。

非常感谢任何帮助。

我放在控制器中的代码我不确定是否正确。 家庭控制器

public function index() {
        //Populate localities dropdownlist  
        App::import('model','locality');
        $locality = new Locality('locality');
        $this->set('localities',$locality->find('list', array('fields' => array('id', 'fullname'))));

        App::import('model','condition');
        $condition = new Condition('condition');
        $this->set('conditions',$condition->find('list', array('fields' => array('id', 'condition'))));

        App::import('model','category');
        $category = new Category('category');
        $this->set('categories',$category->find('list', array('fields' => array('id', 'category'))));

        App::import('model','serviceType');
        $servicetype = new ServiceType('serviceType');
        $this->set('serviceTypes',$servicetype->find('list', array('fields' => array('id', 'service_type'))));
    }

视图

<?php 
    echo $this->Form->create('Property',array('contoller' =>'home', 'action'=> 'search'));
    echo $this->Form->input('priceFrom',array('style'=> 'width:100%;'));
    echo $this->Form->input('priceTo',array('style'=> 'width:100%;'));
    echo $this->Form->input('locality_id',array('style'=> 'width:100%;'));
    echo $this->Form->input('condition_id',array('style'=> 'width:100%;'));
    echo $this->Form->input('category_id',array('style'=> 'width:100%;'));
    echo $this->Form->input('service_type_id',array('style'=> 'width:100%;'));
    echo $this->Form->end('Search');
    ?>

2 个答案:

答案 0 :(得分:0)

这样的事情听起来像是一个很好的起点(你可能错过的技巧是使用ClassRegistryinit一个不同的模型,所以你可以对它进行查询)

<?php
class HomeController extends AppController {
    public function search() {
        if (!empty($this->request->query['s'])) {
            $property = ClassRegistry::init('Property');
            $searchstring = h($this->request->query['s']);
            $searchResults = $property->find('all',array(
                'limit' => 15,
                'order' => array(
                    'Property.title' => 'asc'
                ),
                'conditions' => array(
                    'or' => array(
                        "Property.title LIKE" => "%$searchstring%",
                        "Property.desc LIKE" => "%$searchstring%" //or whatevs
                    )
                )
            ));
            $this->set(compact('searchResults'));
        }
    }
}

会在以下网址上提供搜索结果:http://example.com/home/search?s=palacial

如果你担心SQL注入,我听说过:

  

&#34; CakePHP处理所有参数的SQL转义到Model :: find()和   模型::保存()&#34。   http://book.cakephp.org/2.0/en/core-utility-libraries/sanitize.html

答案 1 :(得分:0)

您可以创建一个处理搜索功能的元素,将表单定位到控制器内的函数。

比如说,如果你想搜索属性,可以在PropertyController内进行:

public function search()
{
    //your search functionality, like $this->Property->find('all');, or adding conditions
}

然后你可以添加一个包含搜索表单的元素,命名为search.ctp(在View/Elements文件夹内):

$this->Form->create('Property', array('type' => 'get'));
$this->Form->input('search');
$this->Form->end('Search');

在您的主页中,您可以添加以下元素:

echo $this->element('search');

关于元素的好处是你可以在其他视图或布局中重用它