使用 CakePHP 在另一个视图上显示搜索结果
Show search results on another view with CakePHP
我现在正在使用 CakePHP,我需要使用一个视图进行搜索,然后将数据发送到同一控制器上的另一个操作,这将触发具有该搜索结果的另一个视图。问题是,在搜索屏幕上,还有一个 table 显示了一些相同型号的数据,我认为这是一个大问题。
所以现在,这就是我得到的:
public function busca() {
$emergency = TableRegistry::get('EmergencySheets');
$manufacturers = TableRegistry::get('Manufacturers');
$data = $this->request->is('get') ? $this->request->query : $this->request->getData();
$query = $emergency->find()
->select(['id', 'data_atualizacao_fabricante', 'tarja', 'manufacturer_id', 'nome_comercial'])
->where('EmergencySheets.data_atualizacao_fabricante')
->order(['data_atualizacao_fabricante'=>'DESC'])
->limit(7);
$manufacturer_query = $manufacturers->find()
->select(['id','nome'])
->where($query->manufacturer_id = 'id');
$manufacturer = $manufacturer_query->toArray();
$sheets = $query->toArray();
$this->set('manufacturers', $manufacturer);
$this->set('sheets', $sheets);
if($data){
return $this->redirect(['action' => 'ficha' , $data]);
}else{
return $this->redirect(['action' => 'busca404']);
}
}
我该如何处理?
谢谢大家!
编辑:
忘了提,但是 $data 变量在表单上总是空的,即使我在表单输入中键入内容也是如此。这也是查看代码!
<section class="search-section">
<div class="container px-0">
<div class="search-wrapper">
<div class="search-title">
<h2><span>Quais produtos</span>você vai transportar?</h2>
<p><span>Pesquise pelos produtos no campo de busca</span>
ou clique nas letras ao lado.
</p>
</div>
<div class="search-bar">
<?=$this->Form->create()?>
<div class="ml-5 bar">
<input type="text" placeholder="Procure várias fichas de uma só vez" class="formcontrol tip"
data-toggle="tooltip" data-placement="top">
<span class="removeClick"><i class="fas fa-times-circle fa-2x"></i></span>
<button type="submit" class="btn"><i class="fa fa-search fa-2x"></i></button>
</div>
<?=$this->Form->end()?>
<div class="ml-5 alfabeto text-center">
<button href="#A">A</button> <button href="#B">B</button> <button href="#C">C</button> <button href="#D">D</button>
<button href="#E">E</button> <button href="#F">F</button> <button href="#G">G</button> <button href="#H">H</button>
<button href="#I">I</button> <button href="#J">J</button> <button href="#K">K</button> <button href="#L">L</button>
<button href="#M">M</button> <button href="#N">N</button> <button href="#O">O</button> <button href="#P">P</button>
<button href="#Q">Q</button> <button href="#R">R</button> <button href="#S">S</button> <button href="#T">T</button>
<button href="#U">U</button> <button href="#V">V</button> <button href="#W">W</button> <button href="#X">X</button>
<button href="#Y">Y</button> <button href="#Z">Z</button><button href="#0-9">0-9</button>
</div>
</div>
</div>
</div>
请考虑将代码放在行之后:
return $this->redirect(['action' => 'busca404']);
}
在那种情况下,所有这些行在任何情况下都不会执行,因为无论请求是否为 "get",您都在强制重定向。所以所有的代码都不会被执行。
我认为您需要定义重定向到 "ficha" 操作的条件,以及在哪些条件下保留到 "busca" 操作
我会为搜索表单和结果使用相同的功能和模板。用重定向消除整个 if
部分,只有在有数据要搜索时才进行搜索,并更改视图以检查是否有结果要显示。像这样:
$data = $this->request->is('get') ? $this->request->getQueryParams() : $this->request->getData();
if (!empty($data)) {
// Do your searches using $data here, set the results for the view
$this->set('results', $results);
}
然后在您的模板中,就像您展示的那样,但添加一个部分
if (isset($results)):
// Display your search results here
endif;
我现在正在使用 CakePHP,我需要使用一个视图进行搜索,然后将数据发送到同一控制器上的另一个操作,这将触发具有该搜索结果的另一个视图。问题是,在搜索屏幕上,还有一个 table 显示了一些相同型号的数据,我认为这是一个大问题。 所以现在,这就是我得到的:
public function busca() {
$emergency = TableRegistry::get('EmergencySheets');
$manufacturers = TableRegistry::get('Manufacturers');
$data = $this->request->is('get') ? $this->request->query : $this->request->getData();
$query = $emergency->find()
->select(['id', 'data_atualizacao_fabricante', 'tarja', 'manufacturer_id', 'nome_comercial'])
->where('EmergencySheets.data_atualizacao_fabricante')
->order(['data_atualizacao_fabricante'=>'DESC'])
->limit(7);
$manufacturer_query = $manufacturers->find()
->select(['id','nome'])
->where($query->manufacturer_id = 'id');
$manufacturer = $manufacturer_query->toArray();
$sheets = $query->toArray();
$this->set('manufacturers', $manufacturer);
$this->set('sheets', $sheets);
if($data){
return $this->redirect(['action' => 'ficha' , $data]);
}else{
return $this->redirect(['action' => 'busca404']);
}
}
我该如何处理? 谢谢大家!
编辑: 忘了提,但是 $data 变量在表单上总是空的,即使我在表单输入中键入内容也是如此。这也是查看代码!
<section class="search-section">
<div class="container px-0">
<div class="search-wrapper">
<div class="search-title">
<h2><span>Quais produtos</span>você vai transportar?</h2>
<p><span>Pesquise pelos produtos no campo de busca</span>
ou clique nas letras ao lado.
</p>
</div>
<div class="search-bar">
<?=$this->Form->create()?>
<div class="ml-5 bar">
<input type="text" placeholder="Procure várias fichas de uma só vez" class="formcontrol tip"
data-toggle="tooltip" data-placement="top">
<span class="removeClick"><i class="fas fa-times-circle fa-2x"></i></span>
<button type="submit" class="btn"><i class="fa fa-search fa-2x"></i></button>
</div>
<?=$this->Form->end()?>
<div class="ml-5 alfabeto text-center">
<button href="#A">A</button> <button href="#B">B</button> <button href="#C">C</button> <button href="#D">D</button>
<button href="#E">E</button> <button href="#F">F</button> <button href="#G">G</button> <button href="#H">H</button>
<button href="#I">I</button> <button href="#J">J</button> <button href="#K">K</button> <button href="#L">L</button>
<button href="#M">M</button> <button href="#N">N</button> <button href="#O">O</button> <button href="#P">P</button>
<button href="#Q">Q</button> <button href="#R">R</button> <button href="#S">S</button> <button href="#T">T</button>
<button href="#U">U</button> <button href="#V">V</button> <button href="#W">W</button> <button href="#X">X</button>
<button href="#Y">Y</button> <button href="#Z">Z</button><button href="#0-9">0-9</button>
</div>
</div>
</div>
</div>
请考虑将代码放在行之后:
return $this->redirect(['action' => 'busca404']);
}
在那种情况下,所有这些行在任何情况下都不会执行,因为无论请求是否为 "get",您都在强制重定向。所以所有的代码都不会被执行。
我认为您需要定义重定向到 "ficha" 操作的条件,以及在哪些条件下保留到 "busca" 操作
我会为搜索表单和结果使用相同的功能和模板。用重定向消除整个 if
部分,只有在有数据要搜索时才进行搜索,并更改视图以检查是否有结果要显示。像这样:
$data = $this->request->is('get') ? $this->request->getQueryParams() : $this->request->getData();
if (!empty($data)) {
// Do your searches using $data here, set the results for the view
$this->set('results', $results);
}
然后在您的模板中,就像您展示的那样,但添加一个部分
if (isset($results)):
// Display your search results here
endif;