【问题标题】:CakePHP Doing search in home pageCakePHP 在主页上进行搜索
【发布时间】:2014-03-12 13:34:08
【问题描述】:

我想知道如何在我的主页上搜索属性之类的东西。

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

我所需要的只是朝着正确的方向前进。我需要所有与例如 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');
    ?>

【问题讨论】:

标签: cakephp search cakephp-2.4


【解决方案1】:

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

说,如果要搜索属性,可以在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');

元素的好处是您可以在其他视图或布局中重复使用它

【讨论】:

    【解决方案2】:

    这样的事情听起来是个不错的起点(您可能缺少的技巧是使用 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 注入,我听说过:

    "CakePHP 处理对 Model::find() 的所有参数的 SQL 转义和 模型::save()。” http://book.cakephp.org/2.0/en/core-utility-libraries/sanitize.html

    【讨论】:

      猜你喜欢
      • 2015-04-05
      • 2012-12-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多