Часто видел в интернете упреки в сторону CakePHP в том смысле, что ему для работы обязательно нужна база данных, и это, мол, великое зло. Как-то не обращал внимания на данные утверждения (и правильно делал), так как всегда использовал базу данных. Но вот случилась необходимость сделать сайт на CakePHP без БД (временный сайт, со статикой, в будущем подразумевающий развитие до использования базы). В русскоязычной части интернета не удалось найти решения этой задачи (ясно примерно как это сделать, но хочется готового 🙂 ), к счастью, на англоязычном блоге был найден ответ.
Итак, приступим.
Сначала нужно создать для кейка новый источник данных (который будет заглушкой, по сути, и с данными никак работать не будет).
Создаем папку:
app/models/datasources/dbo
В которой нужно создать файл с именем:
dbo_dummy_source.php
В этом файле мы и опишем свой «источник данных». Вот содержимое файла:
<?php class DboDummySource extends DataSource { var $description = "This is a dummy data source"; function connect() { $this->connected = true; return $this->connected; } function disconnect() { $this->connected = false; return !$this->connected; } function value($string) { return "\0".$string."\0"; } } ?>
Вот и все. Теперь осталось только указать в файле конфигурации базы данных («app/config/database.php«) наш фиктивный драйвер, вместо реального драйвера подключения к базе данных, обычно это «mysql». Файл конфигурации в итоге должен выглядеть примерно так:
<?php class DATABASE_CONFIG { var $default = array( 'driver' => 'dummy_source'); } ?>
И не забываем во всех моделях указать, что база данных для них не используется:
var $useTable = false;
В источнике решения автор пишет, что проверял данный код в версии кейка 1.2.x. Я проверял на 1.3 RC4 – работает.