【问题标题】:GET method CakePHP search formGET 方法 CakePHP 搜索表单
【发布时间】:2014-02-21 17:30:08
【问题描述】:

我有几天使用 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();

?>

我的控制器:

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 方法,当我搜索某些内容时,我在 url 中得到了这个:

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

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

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

因为我不知道 url 中的 X 和 Y 是什么,我想我的问题是控制器和我的条件,因为我没有为 $this->request->params['Negocio']['lugar' 使用任何东西];

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

顺便说一下这是调试($this->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'
)

【问题讨论】:

  • 为什么不直接使用github.com/CakeDC/search
  • 嘿@mark 我读过一些关于这个的东西,但我正在学习如何使用 CakePHP,所以我更喜欢不用插件,但是谢谢。
  • 使用熟练开发人员的代码或流行的插件并不丢人(尤其是作为初学者)。通过这种方式,您可以学习如何正确操作。拥抱可用的代码,研究它,用干净和良好的编码自学。比烤一些有问题的东西要好——这通常发生在你还不完全知道如何做某些事情的时候。 PS:“array('controller' => ...” => 控制器部分在这里无效 - 如果没有“url”键作为父级,它是无用的。请参阅文档。发布形成它本身,你可以在 create() 中省略整个设置。
  • 我理解,但我更喜欢这种方式,无意冒犯我接受所有的意见和建议,所以这应该是 echo $this->Form->create(array('action' => 'buscar' , '类型' => '获取')); ??

标签: php cakephp


【解决方案1】:

试试

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

X 和 Y 无关紧要。

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

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

在视图中,使用

echo $this->Form->input('lugar', 数组('选项' => array(array_combine($lugar, $lugar)), 'empty' => '所有地方', 'label' => false, 'div' => false, 'class' => '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%",
             ....

【讨论】:

  • 我会试试这个,现在我有更多关于该怎么做的想法,再次感谢伙计。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2011-08-29
  • 2014-04-07
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
相关资源
最近更新 更多