Файл /View/Elements/lookup.ctp не будет отображаться внутри /View/Layouts/default.ctp (отображается ошибка)? Как мне это сделать?

Я хочу встроить форму ввода HTML (панель поиска) в /View/Layouts/default.ctp (который является макетом представления домашней страницы сайта). Я создал /View/Elements/lookup.ctp со следующим кодом (я написал Element, потому что хотел включить эту панель поиска на каждую страницу сайта):

<?php
echo $this->Form->create('Search', array('action' => 'lookup', 'accept-charset' => 'utf-8'));
echo $this->Form->input(array('type' => 'search', 'name' => 'search', 'placeholder' => 'enter search term'));
echo $this->Form->button('Search', array('type' => 'button', 'value' => 'submit')); 
echo $this->Form->end();
?>

Сама панель поиска должна выглядеть так:

___________________________     ______________
| enter search term       |    |  Search      | <--- button
|_________________________|    |______________|
    ↑
 search bar

Сгенерированный код в /View/Layouts/default.ctp должен быть таким:

<form id="searchForm" method="post" action="/searches/lookup" accept-charset="utf-8">
    <input type="search" name="search" placeholder="enter search term" />
    <button type="button" name="submit" value="submit">Search</button>
</form>

Я включил строку:

<?php echo $this->element('lookup'); ?>

в /View/Layouts/default.ctp (который встраивает элемент), но когда я перехожу на домашнюю страницу, он не отображает этот элемент, и появляется ошибка:

(@Wylie: Да, вы правы. Это была не вся ошибка. Вот полная ошибка)

#0 C:\wamp\www\lib\Cake\Model\Datasource\DboSource.php(436): PDOStatement->execute(Array)
#1 C:\wamp\www\lib\Cake\Model\Datasource\Database\Mysql.php(307): DboSource->_execute('SHOW FULL COLUM...')
#2 C:\wamp\www\lib\Cake\Model\Model.php(1226): Mysql->describe(Object(Search))
#3 C:\wamp\www\lib\Cake\View\Helper\FormHelper.php(197): Model->schema()
#4 C:\wamp\www\lib\Cake\View\Helper\FormHelper.php(450): FormHelper->_introspectModel('Search', 'fields')
#5 C:\wamp\www\azil\View\Elements\lookup.ctp(2): FormHelper->create('Search', Array)
#6 C:\wamp\www\lib\Cake\View\View.php(595): include('C:\wamp\www\azi...')
#7 C:\wamp\www\lib\Cake\View\View.php(317): View->_render('C:\wamp\www\azi...', Array)
#8 C:\wamp\www\azil\View\Layouts\default.ctp(91): View->element('lookup')
#9 C:\wamp\www\lib\Cake\View\View.php(595): include('C:\wamp\www\azi...')
#10 C:\wamp\www\lib\Cake\View\View.php(411): View->_render('C:\wamp\www\azi...')
#11 C:\wamp\www\lib\Cake\View\View.php(373): View->renderLayout('<h2>Database ta...', 'default')
#12 C:\wamp\www\lib\Cake\Controller\Controller.php(900): View->render('error500', NULL)
#13 C:\wamp\www\lib\Cake\Error\ExceptionRenderer.php(282): Controller->render('error500')
#14 C:\wamp\www\lib\Cake\Error\ExceptionRenderer.php(191): ExceptionRenderer->_outputMessageSafe('error500')
#15 [internal function]: ExceptionRenderer->_cakeError(Object(MissingTableException))
#16 C:\wamp\www\lib\Cake\Error\ExceptionRenderer.php(165): call_user_func_array(Array, Array)
#17 C:\wamp\www\lib\Cake\Error\ErrorHandler.php(127): ExceptionRenderer->render()
#18 [internal function]: ErrorHandler::handleException(Object(MissingTableException))
#19 {main} [<b>CORE\Cake\Error\ErrorHandler.php

Отсутствует стол?! Что за отсутствующая таблица, просто нужно добавить пару строк HTML в /View/Layouts/default.ctp. Я не понимаю, что происходит. Пожалуйста помоги. Спасибо.

1 ответ

Решение

Cake ожидает, что Модель будет иметь соответствующую таблицу базы данных. Основываясь на неполной выдаче ошибок, Cake ищет searches таблица в базе данных, но не могу ее найти. Потому что вы включаете element который содержит форму, принадлежащую пирогу модели поиска, запрашивает у базы данных описание столбцов для правильного отображения формы.

Вы уверены, что хотите иметь отдельный контроллер и модель для поиска? search также может быть действие соответствующего контроллера (PostsController, например).

Конечно, если вам нужна глобальная модель поиска, которая может запрашивать несколько моделей (например, сообщения, страницы, пользователи), моделирование может иметь смысл. Вы можете сказать Cake, что Модель не имеет таблицы базы данных:

public $useTable = false;
Другие вопросы по тегам