Показать результаты поиска в другом представлении с CakePHP - PullRequest
0 голосов
/ 19 октября 2018

Сейчас я работаю с CakePHP, и мне нужно выполнить поиск с одним представлением, а затем отправить данные другому действию на том же контроллере, которое вызовет другое представление с результатами этого поиска.Дело в том, что на экране поиска есть также таблица, показывающая некоторые данные той же модели, и я считаю, что это одна большая проблема.Итак, прямо сейчас, вот что я получил:

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>

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я бы использовал ту же функцию и шаблон для формы поиска и результатов.Исключите весь раздел 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;
0 голосов
/ 20 октября 2018

Обратите внимание, что вы ставите код после строки:

return $this->redirect(['action' => 'busca404']);
}

В этом случае все эти строки не будут выполнены ни в коем случае, потому что вы форсируете перенаправления, либо если запрос "get", либо нет,Таким образом, весь этот код не будет выполнен.

Я думаю, что вам нужно определить условия для перенаправления на действие "ficha" и в каких условиях оно остается в действии "busca"

...