Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Когда делаю что-нибудь узкоспециальное, чтобы не перепиливать какой-нибудь ORM и не воротить еще больше абстракций над фреймворком под свои узкоспециальные нужды, тоже так пишу.
ГК или не ГК - зависит от контекста.
когда возникает необходимость включить файл с классом и создать экземпляр, так или иначе придется это сделать или прописать эти два действия последовательно или оставить инклюд на совести класса, пусть сам свой исходник подключает автолоадом. Исходя из того, что других классов (кроме каркаса, реализующего MVC) использовать не планируется, то и решил не грузить лишним диспетчер (dispatchCAId ниже по коментам). Хотя справедливости ради следовало бы проверять, не описан ли запрашиваемый класс в загруженных ранее файлах, дабы не производить поиск файла класса в папках Controllers и Models и предусмотреть имена классов не подходящих под соглашение "mModelname"/"cControllername"
вот тут то и нада бы подключать файл класса нужного контроллера, а не автолоадером. А Автолоадер переделать для загрузки по неймспейсам, чтобы можно было не только модели ним грузить но и другие классы
Ну и синглтон тут не при чем,
простая архитектура, есть ссылка например show/post/10
есть маршрутизатор, который по show/post/:id определяет что нужно вызвать такой-то экшн такого-то контроллера, далее инклудится файл с контроллером (не автолоадером) и создается его инстанс, вызывается экшн. Внутри контроллера я могу вызывать кучу разных классов, которые должны грузиться автолоадером, при чем не только модели но и разные хелперы и т п
выше коментами http://govnokod.ru/6373#comment82038 об этом же. согласен, что в данной редакции автолоадер ограничивает создание экземпляров классов, кроме оговоренных. Когда встанет задача описывать более сложные механизмы в приложении, надо будет доработать либо диспетчер либо автолоадер
по мне, так лучше разделять не по типу, а по имени. например, юзеры, страничка профайла. Тогда файлы такие:
/Users/Profile/Controller.php - класс Users_Profile_Controller extends Controller
/Users/Profile/Model.php - класс Users_Profile_Model extends Model
/Users/Profile/View.php - класс Users_Profile_View extends View
/Users/Profile/views/main.php - основной шаблон вьюва
/Users/Profile/views/edit.php - шаблон вьюва страницы редактирования
/Users/Profile/js/*.js - подрубаемые жабаскрипты профайла
/Users/Profile/css/*.css - подрубаемые стили профайла
/Users/Profile/img/*.* - картинки, относящиеся только к профайлу.
ну хорошо, статика пойдет в /Users/Profile/res/*/*.*
но у меня идея в том, что бы все, относящееся к компоненту, держать вместе в папках с подпапками, вместо разброса по корневым директориям по всему проекту
не не не, все пучком ))) зато все точно раздельно )) столько проектиков на этом велосипеде написал... сначала развивал фреймворк в сторону хелперов/хтмл-выдачи вьюхами. Потом добавил у контроллера кроме $this->renderAction($action) еще и $this->renderJSON и ушел в глубокий Мутулз и толстенные джаваскрипты. хелперы сразу стали настолько не нужны...
мои задачи вполне решались до сих пор адресами вида /controllername/action/id и диспетчер передавал action и id нужному контроллеру
понятно, что все, что выходит за рамки "просто id" передается через POST
ну почему же он плачет? ведь id может быть не только числовым!
APPBASE/Users/add/UserName
приведет к созданию экземпляра класса cUsers и вызову его метода
$this->add('UserName');
Этот метод создаст пользователя и выполнит $this->renderAction('ViewName') или $this->renderJSON($data), что приведет к html- или JSON-выдаче
А если я вдруг захочу поменять ссылку на что-то другое, нужно менять названия контроллеров, экшенов. Лучше написать простенький маршрутизатор, и проганять всё через него.
Ну, для меня, как для заядлого велосипедиста, не интересно то, что где-то реализовано, я предпочитаю стоя и в гамаке - реализовывать вручную. Но чувствую, что кеширование придется скоро писать...
не не не ))) я не пишу заново вспомогательные приблуды. Но некоторые вещи на PHP предпочитаю написать сам. Не из любви к языку (некоторые вещи на Java удобнее, да и вообще серверные языки не важны, важно взаимодействие клиентов и сервисов), а из желания лучше понять алгоритм.
Это что получается, что cData он будет грузить из Controllers/Data.php, а controller - из Controllers/ontroller.php? Да, очень здорово ) Тогда бы уж обозвал его cController что-ли... ну или там cBaseController
класс baseClass, его потомки dbConnection, controller и model прописаны в /classes.php
model реализует подобие ActiveRecord - на уровне выбрать/вставить/листать абстрагирует от БД
controller имеет методы renderAction, renderText и renderJSON
renderAction собирает вид /Views/controllerName/actionName.php
методы возвращают собранный вид, не выводя его. Соответственно можно собрать выдачу нескольких контроллеров на одном общем виде...
ГК или не ГК - зависит от контекста.
значит в скором времени это накладут на govnokod.ru
говным говно
там прямо в тексте написано
поэтому не показательная характеристика
а оно, оказывается, проверяет, если был создан уже объект, то возвращает его, нет - создает и возвращает )) почти синглтон )))
простая архитектура, есть ссылка например show/post/10
есть маршрутизатор, который по show/post/:id определяет что нужно вызвать такой-то экшн такого-то контроллера, далее инклудится файл с контроллером (не автолоадером) и создается его инстанс, вызывается экшн. Внутри контроллера я могу вызывать кучу разных классов, которые должны грузиться автолоадером, при чем не только модели но и разные хелперы и т п
/Users/Profile/Controller.php - класс Users_Profile_Controller extends Controller
/Users/Profile/Model.php - класс Users_Profile_Model extends Model
/Users/Profile/View.php - класс Users_Profile_View extends View
/Users/Profile/views/main.php - основной шаблон вьюва
/Users/Profile/views/edit.php - шаблон вьюва страницы редактирования
/Users/Profile/js/*.js - подрубаемые жабаскрипты профайла
/Users/Profile/css/*.css - подрубаемые стили профайла
/Users/Profile/img/*.* - картинки, относящиеся только к профайлу.
Так плохо?
но у меня идея в том, что бы все, относящееся к компоненту, держать вместе в папках с подпапками, вместо разброса по корневым директориям по всему проекту
...
Type\Class
уже можно:)
а рутеры то тут есть?
понятно, что все, что выходит за рамки "просто id" передается через POST
APPBASE/Users/add/UserName
приведет к созданию экземпляра класса cUsers и вызову его метода
$this->add('UserName');
Этот метод создаст пользователя и выполнит $this->renderAction('ViewName') или $this->renderJSON($data), что приведет к html- или JSON-выдаче
APPBASE/news/read/navodnenie-v-seo-otdele
просто там об этом подумано "за нас".
А кеширование писать легко:
$mc = new Memcaсhe;// если демон на локалхосте и 11211 порту, иначе указать куда конектитсья
$mс->set('ключ', 'значение');
echo $mc->get('ключ');
// Только свой мемкеш не нужно писать:)
model реализует подобие ActiveRecord - на уровне выбрать/вставить/листать абстрагирует от БД
controller имеет методы renderAction, renderText и renderJSON
renderAction собирает вид /Views/controllerName/actionName.php
методы возвращают собранный вид, не выводя его. Соответственно можно собрать выдачу нескольких контроллеров на одном общем виде...