tf
крылья рулят
делаю один движок и немного путаюсь в структуре да и в названиях
допустим есть один движок, в которым можно переписать основные механизмы обработки, вывода и сохранения информации в системе администрирования
суть структуры которой хочется добится
- есть один главный контроллер, который умеет подчинять себе другие контролеры
он определяет (в зависимости от передаваемых из вне данных) какие задачи им дать:
выбрать данные и передать их в представление,
сохранить полученные данные и вернуть клиенту js код для обновления представления,
выполнить какую то задачу заложенную в контроллере
сами эти контроллеры должны управлять каким то куском информации - толи это изменение одной записи таблицы (самый простой вариант), толи куском информации в разных таблицах с одним общим id (идентификатором отношения к чему то)
сами эти контроллеры не могут ни обработать информацию, ни сохранить, ни прочитать, они могут только управлять поведением подчиненных им модулей (прочитать данные, обработать и сохранить данные, дать js код для обновления представления)
модули - это программый код заключенный в классы, который умеет обрабатывать информацию, в своем распоряжении он имеет
объект базы данных привязанный к одной таблице данных, которому он может приказать сохранить информацию (массив данных), прочить информацию (информация может хранится в разном виде, поэтому он может ее преобразовывать как на входе так и на выходе)
объект обработчика форм - может обработать данные формы (валидность и тп), может вернуть js код обновления представления формы, может вернуть xhtml элемента формы
как это должно работать
отображение страницы
- главный котроллер приказывает котроллерам прочитать данные и подготовить данные для отображения
- котролеры обращаются к своим модулям и приказывают прочитать данные и вернуть класс отвечающий за отображение этих данных (часть обработчка формы которая занимается отображением xhtml)
- модули приказывают своим объектам базы данных прочитать данные и преобразовать в нужный вид, обработчику форм передаются данные и преобразуются во внутренний формат
- гланый контроллер получает данные и класс представления формы, все это передает в представление
так же в представление передается часть контроллера которая должна объяснить странице кто будет обработывать запросы с нее
обработка данных из представления
- главный контролер решает кокой контроллер будет обрабатывать данные, и передает ему управление
- контролер ставит задачу проверить модулю валидность данных,
если данные валидны, дает приказ обработать данные и сохранить, вернуть js код для обновлние представления обработанными данными
если не валидны, дает приказ обработать данные и вернуть js код для обновлние представления обработанными данными (оно дополнительно вывод ошибок)
в обоих случаях данные обрабытывает клас обработчика форм
сохраняет данные объект базы данных
- контроллер получает js код и передает его представлению, в случае выполнение каких то побочных действий может перегрузить страницу, сделать редирект на другую страницу
закладывая всю одинаковую логику в обстранные классы контрллеров, модулей, и объектов базы данных мы получим
вопрос насколько эта логика удобна, крива, можно сделать ее более удобной
допустим есть один движок, в которым можно переписать основные механизмы обработки, вывода и сохранения информации в системе администрирования
суть структуры которой хочется добится
- есть один главный контроллер, который умеет подчинять себе другие контролеры
он определяет (в зависимости от передаваемых из вне данных) какие задачи им дать:
выбрать данные и передать их в представление,
сохранить полученные данные и вернуть клиенту js код для обновления представления,
выполнить какую то задачу заложенную в контроллере
сами эти контроллеры должны управлять каким то куском информации - толи это изменение одной записи таблицы (самый простой вариант), толи куском информации в разных таблицах с одним общим id (идентификатором отношения к чему то)
сами эти контроллеры не могут ни обработать информацию, ни сохранить, ни прочитать, они могут только управлять поведением подчиненных им модулей (прочитать данные, обработать и сохранить данные, дать js код для обновления представления)
модули - это программый код заключенный в классы, который умеет обрабатывать информацию, в своем распоряжении он имеет
объект базы данных привязанный к одной таблице данных, которому он может приказать сохранить информацию (массив данных), прочить информацию (информация может хранится в разном виде, поэтому он может ее преобразовывать как на входе так и на выходе)
объект обработчика форм - может обработать данные формы (валидность и тп), может вернуть js код обновления представления формы, может вернуть xhtml элемента формы
как это должно работать
отображение страницы
- главный котроллер приказывает котроллерам прочитать данные и подготовить данные для отображения
- котролеры обращаются к своим модулям и приказывают прочитать данные и вернуть класс отвечающий за отображение этих данных (часть обработчка формы которая занимается отображением xhtml)
- модули приказывают своим объектам базы данных прочитать данные и преобразовать в нужный вид, обработчику форм передаются данные и преобразуются во внутренний формат
- гланый контроллер получает данные и класс представления формы, все это передает в представление
так же в представление передается часть контроллера которая должна объяснить странице кто будет обработывать запросы с нее
обработка данных из представления
- главный контролер решает кокой контроллер будет обрабатывать данные, и передает ему управление
- контролер ставит задачу проверить модулю валидность данных,
если данные валидны, дает приказ обработать данные и сохранить, вернуть js код для обновлние представления обработанными данными
если не валидны, дает приказ обработать данные и вернуть js код для обновлние представления обработанными данными (оно дополнительно вывод ошибок)
в обоих случаях данные обрабытывает клас обработчика форм
сохраняет данные объект базы данных
- контроллер получает js код и передает его представлению, в случае выполнение каких то побочных действий может перегрузить страницу, сделать редирект на другую страницу
закладывая всю одинаковую логику в обстранные классы контрллеров, модулей, и объектов базы данных мы получим
PHP:
# php файл конфигурируемый главный контролер, подготавливает данные для представления
$controler = new cmfAjaxControler();
cmfControler('controler_edit');
$controler_edit = new controler_edit();
$controler_edit->setId(1);
$controler->addControler($controler_edit);
$controler->run();
$this->assing('controler_edit', $controler_edit->getView());
list($form, $data) = $controler_edit->current()->main;
$this->assing('form', $form);
$this->assing('data', $data);
PHP:
# представление
<?=$controler_edit->htmlStartForm() ?>
<?=$form->getHtml('phone') ?>
<?=$form->getHtml('email') ?>
<?=$form->getHtml('icq') ?>
<?=$controler_edit->htmlEndForm() ?>
PHP:
# контроллеры, модули, объект базы данных
class controler_edit extends abstract_controler_edit {
protected function init() {
parent::init();
$this->addObject('main', new modul_edit());
// url
$this->setSubmitUrl(cmfPages::getMain());
}
}
class modul_edit extends abstract_modul_edit {
protected function init() {
parent::init();
$db = new db_edit();
$this->setDb($db);
// формы
$form = $this->getForm();
$form->addObject('phone', new cmfFormText(array('max'=>255, '!empty'=>1)));
$form->addObject('email', new cmfFormText(array('max'=>255, '!empty'=>1)));
$form->addObject('icq', new cmfFormText(array('max'=>255, '!empty'=>1)));
}
}
class db_edit extends abstract_db_edit {
protected function getTable() {
return db_main;
}
}