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

Я хочу встроить форму ввода 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 Ответ

0 голосов
/ 02 февраля 2012

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

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

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

public $useTable = false;
...