Функция Cakephp в режиме не выполняется - PullRequest
1 голос
/ 13 апреля 2010

В моей модели комиксов есть функция:

<?php

class Comic extends AppModel
{
    var $name = "Comic";
    // Methods for retriving information.
    function testFunc(){
        $mr = $this->find('all');
        return $mr;
    }
}
?>

И я называю это в моем контроллере так:

<?php
class ComicController extends AppController
{
   var $name = "Comic";
   var $uses = array('Comic');
   function index()
   {
  }
  function view($q)
  {
    $this->set('array',$this->Comic->testFunc());
  }
}
?>

Когда я пытаюсь загрузить страницу; Я получаю следующую ошибку:

Предупреждение (512): ошибка SQL: 1064: в синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'testFunc' в строке 1 [CORE / cake / libs / model / datasources / dbo_source.php, строка 525] Запрос: testFunc

И дамп SQL выглядит так:

(по умолчанию) 2 запроса заняли 1 мс
Nr Ошибка запроса Взятые строки (мс)
1 ОПИСАНИЕ comics 10 10 1
2 testFunc 1064: у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с 'testFunc' в строке 1 0

Похоже, вместо запуска функции testFunc () он пытается выполнить запрос "testFunc" и завершается неудачей ...

Ответы [ 2 ]

0 голосов
/ 13 апреля 2010

ОК, я наконец смог воспроизвести ту же ошибку. Я подозревал, что ошибка была в том, что Cake пытался «автоматически» создать функциональность модели, что происходит, когда он не может найти модель, соответствующую контроллеру. Итак, я создал контроллер (app/controllers/comic_controller.php), но не модель. Я использовал точный код контроллера оригинального плаката, и когда я попытался вызвать действие Comic::view, я получил ту же ошибку.

Я могу только заключить, что, подобно другим отклонениям от соглашений о присвоении имен Cake, оригинальный постер назвал файл модели забавным образом (например, app/models/comics.php), так что Cake не смог его найти и попытался компенсировать магия. И не удалось.

Итак, чтобы подчеркнуть мой первый комментарий к первоначальному вопросу, я настоятельно рекомендую в соответствии с соглашениями ! По крайней мере, начните , следуя за ними, затем разбивайте их по одному, чтобы, когда что-то ломалось, вы знали почему.

Для модуля «Комиксы» вот основные компоненты в обычной схеме именования:

  • Контроллер:
    • имя класса: ComicsController extends AppController
    • имя файла: app/controller/comics_controller.php
  • Модель:
    • имя класса: Comic extends AppModel
    • имя файла: app/controller/comic.php
  • Каталог просмотров: app/views/comics/
  • Таблица базы данных: comics
0 голосов
/ 13 апреля 2010

Что произойдет, если вы выполните var_dump ($ this-> Comic-> testFunc ())? Похоже, это должно работать. Кстати, вы действительно можете установить $ массив, как это? Я думал, что массив был зарезервированным словом в PHP. В любом случае, вы можете захотеть переименовать его в нечто более описательное (тип - массив, так что вы на самом деле не добавляете метаданные, которых еще нет с этим именем).

Кроме того, что отображается в журнале ошибок CakePHP? Что-нибудь в журнале ошибок Apache?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...