GET方法CakePHP搜索表单

时间:2014-01-29 18:06:37

标签: php cakephp

我有几天使用CakePHP,我想制作一个简单的搜索表单,但我卡住了我有这个:

我的搜索表单:

<?php 

echo $this->Form->create(array('controller' => 'negocios', 'action' => 'buscar', 'type' => 'get'));
echo $this->Form->input('lugar', 
    array('options' => 
        array('City 1', 
            'City 2', 
            'City 3', 
            'City 4', 
            'City 5', 
            'City 6', 
            'City 7',
            'City 8',
            'City 9'
            ), 'empty' => 'All places', 'label' => false, 'div' => false, 'class' => 'selectric'));

echo $this->Form->input('buscador', array('placeholder' => 'Buscar negocios...', 'label' => false));
echo $this->Form->submit('search.png', array('type' => 'button', 'id' => 'buscar', 'div' => false));
echo $this->Form->end();

&GT;

我的控制器:

public function buscar(){

$negocios = array();


if (!empty($this->request->params['Negocio'])) {

    $query = $this->request->params['Negocio']['buscador'];

    $conditions = array(
        'conditions' => array(
            'or' => array(
                'Negocio.nombre LIKE' => "%$query%",
                'Negocio.direccion LIKE' => "%$query%",
                'Negocio.descripcion LIKE' => "%$query%",
                'Negocio.direccion LIKE' => "%$query%",
                'Negocio.email LIKE' => "%$query%",
                'Negocio.web LIKE' => "%$query%",
                'Negocio.facebook LIKE' => "%$query%",
                'Negocio.twitter LIKE' => "%$query%",
                'Negocio.categoria LIKE' => "%$query%"
            )
        )
    );

    $negocios = $this->Negocio->find('all', $conditions);
}

$this->set('negocios', $negocios);
debug($this->params);

}

我在视图中没有得到任何东西使用foreach(),它正在使用POST方法,当我搜索某些东西时,我会在网址中得到这个:

http://example.com/directorio/negocios/buscar?lugar=0&buscador=this+is+an+example&x=0&y=0

我在表单中的选择使用这些值0,1,2,3,...而不是我想要城市的名称和这样的网址:

http://example.com/directorio/negocios/buscar?lugar=City+1&buscador=this+is+an+example

因为我不知道网址中的X和Y是什么,我想我的问题是控制器和我的条件,因为我没有使用$ this-&gt; request-&gt; params ['Negocio'] ['卢格'];

我希望你能帮助我或指导我该怎么做,谢谢。

顺便说一下这是调试($ this-&gt; params);

object(CakeRequest) {
params => array(
    'plugin' => null,
    'controller' => 'negocios',
    'action' => 'buscar',
    'named' => array(),
    'pass' => array()
)
data => array()
query => array(
    'lugar' => '0',
    'buscador' => 'this is an example',
    'x' => '0',
    'y' => '0'
)

1 个答案:

答案 0 :(得分:4)

尝试

$query = $this->params['query']['buscador'];

X和Y无所谓。

关于lugar。假设你有一个数组

$lugar = array('City 1', 'City2' ,'City3');

在视图中,使用

echo $ this-&gt; Form-&gt; input('lugar',     数组('options'=&gt;         array(array_combine($ lugar,$ lugar)),'empty'=&gt; '所有地方','标签'=&gt; false,'div'=&gt; false,'class'=&gt; 'selectric'));

然后,在控制器中,将$lugar添加到条件:

$query = $this->params['query']['buscador'];
$lugar = $this->params['query']['lugar'];

$conditions = array(
    'conditions' => array(
        'or' => array(
            'Negocio.lugar LIKE' => "%$lugar%",
            'Negocio.nombre LIKE' => "%$query%",
             ....