Доброго всем времени суток!
Есть учетная система написанная на PHP + MySQL (Фреймворк Kohana)
Все отчеты формируются с помощью PHPExcel и выгружаются в Excel, соответственно. Отчетные формы сделаны в виде шаблонов xls.
Сейчас чтоб добавить отчет нужно произвести много телодвижений:
1) Написать контроллер
2) Написать модель
3) Изменить вью
4) Сделать шаблон отчета
Что хочется: А хочется системы наподобие FastReport. Чтоб эту отчетную систему встроить в уже написанную учетную систему.
Может быть можно как-то из PHP через fstreport.dll формировать отчеты. FR нравится тем, что вся логика отчета хранится в самом отчете, не надо "программировать". Да и все отчеты можно хранить в БД.
Может есть какие другие отчетные системы??
Может быть есть какие-то другие соображения на этот счет??
PHP библиотеки отличаются от стандартных по структуре. Контроллера тут и одного достаточно, не ясно зачем отчетам доп. модель если данные и так из какой-то модели выгружаются. По сути нужно создавать только шаблоны отчетов, а их проще создавать в текстовом режиме, остальное можно сделать универсальным.
один контроллер который собственно выгружает отчет + один контроллер в котором описана вся бизнес логика конкретного отчета + модель данных с которыми работает контроллер конкретного отчета
ARezvanov: Залей куда-нить пример кода, чтобы было понятнее. Твой подход логичен, но ты же хочешь универсальности, а для этого достаточно связки первичной\главной модели отчета (например, при выводе статистики по пользователям это таблица\модель users) и его шаблона, а для CRUD действий подойдет универсальный контроллер.
Учетная система, была написан не мной и исторически сложилось так, что в модели описывается только доступ к данным в БД с помощью ORM. т.е. модель возвращает набор данных а вот в контроллере уже идет группировка, сортировка, и т.д.
например Модель:
************************************
<?php
/**
* Модель данных. Договора
*
*/
class Contracts_Model extends Model {
public $table_name = 'contracts';
public function info_users(){
$this->db
->left_join('auth_users', 'auth_users.id', 'self.user')
->select(array(
array('user_id' => 'auth_users.id'),
array('user_username' => 'auth_users.username'),
array('user_fio' => 'auth_users.fio')
));
}
public function info_types(){
$this->db
->left_join('contractstypes', 'contractstypes.id', 'self.type')
->select(array(
array('contractstypes_id' => 'contractstypes.id'),
array('contractstypes_name' => 'contractstypes.name')
));
}
*******************************
т.е. в $contracts получаем набор данных и дальше обрабатываем их как нужно.
Суть в том чтомодель используется не только для данного отчета а ещё для многих интерфейсов, поэтому городить там что либо сложнее чем просто получить набор определенных данных не вариант.
ARezvanov: про расширенные модели для отчетов я уже писал, их потребуется меньше чем 1 отчет-1модель. Не очень понятно почему у тебя половина запросов в модели, а половина в контроллере, там им не место.
Антон Шаманов: Так сложилось исторически. Т.е. ты предлагаешь в одной модели описывать логику всех отчетов, а универсальным контроллером, обращаться к тем или иным данным в этой модели. Так?
ARezvanov: нет, предлагаю модели-отчетов основанные на едином интерфейсе и наследующие соответствующие ORM модели т.е. Model_User extends ORM -> Model_Report_User extends Model_User implements Interface_Report