Файл /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;