Неустранимая ошибка: невозможно повторно объявить класс NewsModel

проблема немного странная, бьюсь с ней уже 2 дня и прежде чем выкладывать как баг просто хотел убедиться что это не моя ошибка.

У меня есть чистая копия CakePHP, у меня есть настроенная БД, и Cake может без проблем подключиться к моей БД. в моей БД у меня есть таблица с именем «новости», и у меня есть контроллер со следующим кодом:

<?php

class UsersController extends AppController {
    public $uses = array('News');

    public function news(){
        $news = $this->News->find('all');
        var_dump($news);
        die;
    }
}

пока я не создаю файл модели для своей таблицы, этот запрос выполняется успешно, но как только я создаю следующий файл модели (сохраняю как News.php в папке модели), я вижу ошибку, которая появляется после кода:

<?php

class NewsModel extends AppModel {
}

Ошибка:

Fatal error: Cannot redeclare class NewsModel in C:\...\cakephp\app\Model\News.php on line 4

Я нахожусь в Windows и запускаю php> 5.2.8


person mohamnag    schedule 16.10.2013    source источник


Ответы (3)


Ну и класс должен быть "Новости", без модельной части.

class News extends AppModel { }

В документации везде приведены примеры. Может возникнуть путаница, потому что контроллер «Новости» называется NewsController, а компонент новостей — NewsComponent, но из ответа я получил здесь это делается для того, чтобы избежать конфликта имен (что вызывает у вас недоумение после прочтения).

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

person Nunser    schedule 16.10.2013

попробуйте использовать var $useTable = 'news'; в вашей модели .. Надеюсь, ваша проблема будет решена.

person Gaurav Chauriya    schedule 18.10.2013
comment
проблема, очевидно, была в чем-то другом, но, тем не менее, просто чтобы дать подсказку, я уже пробовал это, и это не имело значения;) - person mohamnag; 23.10.2013

Модель должна быть единственной, чтобы лучше соответствовать торту.

<?php
App::uses('AppModel', 'Model');
class New extends AppModel {

}
?>

$news = $this->New->find('all');
person evansLY    schedule 16.10.2013
comment
но новое не является новостью в единственном числе (ссылка на форум): S - person Nunser; 16.10.2013
comment
Кроме того, new является зарезервированным ключевым словом в PHP и приведет к ошибке синтаксического анализа при использовании в качестве имени класса. - person dhofstet; 17.10.2013