Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Куда запихнуть автолоадер моделей?
Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
В общем начинаю осваивать ООП, пытаюсь написать что-то вроде учебной CMS (по канонам MVC ).
Сделал следующее:
1. Создал структуру папок (models/, controllers/, templates/default/veiws/)
2. Создал файл конфига в корне (подключение к БД, пути к папкам шаблона и т.д.)
3. index.php - точку входа (в корне) Сейчас index выглядит так:
Для теста в конце вывел одно свойство контроллера - автозагрузчик работает.
Вот теперь пока ума не приложу куда впихнуть автолоадер моделей? Из индекса по MVC должен вызываться только контроллер же?
Есть идея создать отдельный контроллер-автолоадер моделей (что-то вроде родительского класса), а потом от него наследовать все остальные классы-контроллеры. Напрягает только одно - что при таком варианте постоянно придется писать extends, что по-моему не совсем красиво
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
Какой автолоадер моделей?
Модели вызываются из контроллеров какой автолоадер вы для них хотите ещё?
Panoptik
Отправлено: 13 Мая, 2014 - 14:48:22
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
во первых наследование от класса не решит проблему автолоада
нужно писать один автолоадер для всех компонентов вашего приложения, через 2 пинка вы устанете переподключать автолоадеры при каждом чихе
выработайте неймспейсы для ваших классов и опишите это в автолоадере и всё
что-то типа такого
для структуры папок /models /controllers
класс находится в корне ваших директорий контролеров и моделей
через импорт можно включить дополнительные классы которые находятся не в стандартных папках
писал прям тут, так что за работоспособность не отвечаю, но как вариант реализации можно рассмотреть
+ тут еще непаханное поле для доработок и улучшений. всё зависит от ваших желаний и требований
----- Just do it
IllusionMH
Отправлено: 13 Мая, 2014 - 16:19:15
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
razorg1991, проверяйте названия классов и по ним выбирайте из какой папки грузить файл. Для моделей можно "требовать" Model в конце. И если имя класса заканчивается на Model тогда и искать его в папке моделей.
DelphinPRO
Отправлено: 13 Мая, 2014 - 17:06:18
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
spl позволяет регистрировать несколько автозагрузчиков.
Можно этим воспользоваться.
// Дальше не паримся, а просто используем классы, там где они нужны
$controller=new IndexController();
$model=new SuperModel();
Но такой вариант более подходит для особо запущенных случаев
В данном простом случае, видимо, лучше определить пространства имен типа
\controllers\IndexController
\models\SuperModel
и использовать примитивный загрузчик, код которого можно найти в документации на php.net в разделе про автозагрузку (или неймспейсы, не помню)
----- Чем больше узнаю, тем больше я не знаю.
razorg1991
Отправлено: 13 Мая, 2014 - 19:34:28
Частый гость
Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
DelphinPRO, а вот Ваш вариант мне очень понравился
Видимо так и поступлю. Достаточно тогда еще в index подключить файл автолоада и все. (Добавление)
razorg1991 пишет:
DelphinPRO, а вот Ваш вариант мне очень понравился
Видимо так и поступлю. Достаточно тогда еще в index подключить файл автолоада и все.
Только я вот теперь не пойму, что написать еще в index.php, ведь браузер же ничего не выведет, он же не знает какой контроллер мне нужен в данный момент?!
Нужен же типа "запуск приложения". Я снова в тупике (Добавление)
razorg1991 пишет:
DelphinPRO, а вот Ваш вариант мне очень понравился
Видимо так и поступлю. Достаточно тогда еще в index подключить файл автолоада и все.
Только я вот теперь не пойму, что написать еще в index.php, ведь браузер же ничего не выведет, он же не знает какой контроллер мне нужен в данный момент?!
Нужен же типа "запуск приложения". Я снова в тупике (Добавление)
razorg1991 пишет:
DelphinPRO, а вот Ваш вариант мне очень понравился
Видимо так и поступлю. Достаточно тогда еще в index подключить файл автолоада и все.
Только я вот теперь не пойму, что написать еще в index.php, ведь браузер же ничего не выведет, он же не знает какой контроллер мне нужен в данный момент?!
Нужен же типа "запуск приложения". Я снова в тупике (Добавление)
razorg1991 пишет:
DelphinPRO, а вот Ваш вариант мне очень понравился
Видимо так и поступлю. Достаточно тогда еще в index подключить файл автолоада и все.
Только я вот теперь не пойму, что написать еще в index.php, ведь браузер же ничего не выведет, он же не знает какой контроллер мне нужен в данный момент?!
Нужен же типа "запуск приложения". Я снова в тупике (Добавление)
Чето сайт тупит, извиняюсь повторные сообщения (Добавление)
Чето сайт тупит, извиняюсь повторные сообщения (Добавление)
Чето сайт тупит, извиняюсь повторные сообщения
DelphinPRO
Отправлено: 14 Мая, 2014 - 07:31:49
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
razorg1991 пишет:
Только я вот теперь не пойму, что написать еще в index.php, ведь браузер же ничего не выведет, он же не знает какой контроллер мне нужен в данный момент?!
Нужен же типа "запуск приложения". Я снова в тупике
Пора вам узнать такие страшные слова как "роутер", "фронт-контроллер". загуглите.
Вкратце. Роутер анализирует адресную строку (в случае использования mod_rewrite) или GET-параметры, и на их основании определяет, какой из контроллеров должен обработать запрос, и каким из своих методов.
Например имеем запрос типа /posts/display/1
Значит нам нужно вызвать метод display() класса PostsController
Правило условное, вы можете придумать какую угодно адресацию.
Подсказка. на github.com можно найти полно готовых роутеров разной сложности, и либо полностью использовать у себя ( с учетом лиценцзии ;) ), либо просто подсмотреть идеи реализации.
----- Чем больше узнаю, тем больше я не знаю.
razorg1991
Отправлено: 16 Мая, 2014 - 20:57:41
Частый гость
Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
DelphinPRO Спасибо огромное за подсказки
Хотел отправить "Спасибо" в карму, но не дает, говорит "у вас недостаточно сообщений для данной операции"
Поэтому выражаю свою благодарность здесь
wh0am1
Отправлено: 25 Мая, 2014 - 20:53:01
Новичок
Покинул форум
Сообщений всего: 20
Дата рег-ции: Янв. 2014
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.