Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
endf
3 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 16
1

Паттерн mvc

05.09.2013, 17:08. Просмотров 3372. Ответов 20
Метки нет (Все метки)

Всем привет.
Изучаю PHP, а также ООП в PHP, само ООП изучал еще в делфи, так что тут проблем не возникло.
Вот решил попробовать написать что нить с использованием паттерна mvc, но никак не пойму его суть...
Нашел много примеров (один из них http://habrahabr.ru/post/150267/ ) скачал, запустил у себя, посмотрел код, но никак не пойму, как реализовать например регистрацию или авторизацию... + посмотрев пример с хабры появилась мысль что можно без ооп реализовать структуру mvc, прописывая в моделях просто функции работы с бд и потом их вызывать. Не подскажите какие нибудь статейки без тега "для новичков", ибо в примере из хабры много комментариев типо "тут можно вставить какие нибудь функции для работы с бд", а также имеются непонятные пустые функции...
И еще по поводу маршрутизатора на хабре вносили изменение в .htaccess, но насколько я понял не на всех хостингах стоит апач, как можно реализовать без .htaccess, а также без такого объемного маршрутизатора, я так понял он там для чпу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2013, 17:08
Ответы с готовыми решениями:

Паттерн по MVC
Здравствуйте. Изучаю паттерн MVC и параллельно пишу небольшой скриптик. Начинал...

Паттерн MVC
Здравствуйте! Подскажите, по mvc. Изучал статью...

паттерн strategy
в приложенном архиве примерчик гостевой книги. В общем в форму html вводятся...

Паттерн Утка или стратегия зачем вообще паттерны?
Начал ознакамливаться с ООП паттернами программирования, все, конечно, красиво,...

Паттерн Singleton - сделать переменные только readonly для всего сайта
Добрый день. Пишу небольшое приложение на PHP и хочу использовать паттерн...

20
OnYourLips
506 / 356 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
05.09.2013, 19:32 2
Цитата Сообщение от endf Посмотреть сообщение
Не подскажите какие нибудь статейки без тега "для новичков"
Таких не бывает, т.к. это чисто новичковый материал.

Цитата Сообщение от endf Посмотреть сообщение
И еще по поводу маршрутизатора на хабре вносили изменение в .htaccess, но насколько я понял не на всех хостингах стоит апач, как можно реализовать без .htaccess, а также без такого объемного маршрутизатора, я так понял он там для чпу?
На уровне вебсервера ставится заглушка из пары строк, которая просто перенаправляет несуществующие адреса на фронтконтроллер.
Для nginx это одна строка try_files $uri /index.php; перед другими стандартными PHP-параметрами.
1
endf
3 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 16
05.09.2013, 21:39  [ТС] 3
спс за инфу, а как на счет реализации mvc без ооп?
0
OnYourLips
506 / 356 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
05.09.2013, 21:56 4
endf, MVC без ООП - это тот же MVC, только без ООП.
С другой стороны зачем писать на PHP без ООП?
Учи ООП.
0
endf
3 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 16
05.09.2013, 22:05  [ТС] 5
я просто не понимаю смысл создавать все эти классы и так далее, когда можно просто сделать функции и потом их вызывать
0
OnYourLips
506 / 356 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
05.09.2013, 22:13 6
endf, смысл прост: облегчить разработку. Пока у тебя 2 файла по 50 строк без подключаемых библиотек - можно и без ООП. Иначе уже нельзя.
Представь проект на 500мб чистого кода на PHP. И с ним очень просто работать из-за ООП.
1
Zvook
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
06.09.2013, 23:18 7
MVC это парадигма разделения сущностей. Как то так. Реализаций может быть множество и всяких разных, но суть одна: модели, контроллеры и вьюшки располагаются "отдельно" и не зависят друг от друга. Это как бы 3 уровня сайта, в модели происходит вся обработка данных (работа с бд и т. п.), через контроллер происходит "общение" модели с вьюшкой, ну а вьюшка, понятное дело, просто отображает предоставленные ей данные. Без ООП MVC представить себе сложновато, да и вообще сложно себе представить какой-нибудь более менее масштабный проект без использования ООП. Это будет свалка неупорядоченного кода.
1
KorsarGrea
3 / 3 / 1
Регистрация: 07.11.2010
Сообщений: 218
07.09.2013, 13:21 8
Всем привет! извините что не в тему. меня тоже интересует создание mvc на php, а точнее как реализовать обращение к определенному ation в контроллере?
0
Zvook
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
07.09.2013, 13:36 9
Цитата Сообщение от KorsarGrea Посмотреть сообщение
Всем привет! извините что не в тему. меня тоже интересует создание mvc на php, а точнее как реализовать обращение к определенному ation в контроллере?
Через маршрутизатор Загляните в "кишки" какого-нибудь фреймворка, yii например, так быстрее поймете как это работает
0
endf
3 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 16
07.09.2013, 19:11  [ТС] 10
спс за инфу. возник еще 1 вопрос, например у меня есть несколько моделей, во всех идет работа с бд, правильно ли будет создать 1 модель родитель и в ней осуществить подключение к бд, а в моделях потомках уже работать с таблицами?
0
Zvook
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
07.09.2013, 19:29 11
Цитата Сообщение от endf Посмотреть сообщение
спс за инфу. возник еще 1 вопрос, например у меня есть несколько моделей, во всех идет работа с бд, правильно ли будет создать 1 модель родитель и в ней осуществить подключение к бд, а в моделях потомках уже работать с таблицами?
В целом, да. С этого начнется ваш путь написания собственной PDO
По сабжу, покоровыряйтесь в propel или doctrine, чтобы не наступать на грабли, на которые до вас уже наступали
0
OnYourLips
506 / 356 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
07.09.2013, 20:14 12
endf, правильно делать это вне модели, не в родителе.
0
webphp
55 / 53 / 18
Регистрация: 05.08.2013
Сообщений: 327
08.09.2013, 03:02 13
Цитата Сообщение от OnYourLips Посмотреть сообщение
endf, правильно делать это вне модели, не в родителе.
Тут уже наверное от вкуса и от сложности проекта зависит. С другой стороны да, лучше отдельно. У меня модели привязаны к таблицам, чтобы если что было понятно где колупать, просто, понятно и сердито.
0
OnYourLips
506 / 356 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
08.09.2013, 10:56 14
Цитата Сообщение от webphp Посмотреть сообщение
Тут уже наверное от вкуса и от сложности проекта зависит.
Нет.
В данном случае это не дело вкуса. Один из вариантов неверный.
Иначе получится, что класс модели занимается слишком многим, это плохой код.
0
Zvook
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
08.09.2013, 11:17 15
Цитата Сообщение от OnYourLips Посмотреть сообщение
Нет.
В данном случае это не дело вкуса. Один из вариантов неверный.
Иначе получится, что класс модели занимается слишком многим, это плохой код.
Я это понял примерно так: Родительский класс занимается базовыми функциями работы с базой, то есть коннект, дисконнект, селект, апдейт, делит и так далее и тому подобное. А наследники используют его методы для уже каких-то конкретных действий. То что родительский класс как бы и не относится к модели я согласен, он скорее относится к ядру фреймворка
0
jora_xrenov
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 5
08.09.2013, 12:43 16


http://mvcphp.ru/

Исходные коды там же
0
endf
3 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 16
09.09.2013, 16:36  [ТС] 17
а в какой файл тогда записывать подключение к бд? в отдельный файл и инклюдить к каждой модели? и еще, надо ли как нибудь закрывать работу с бд, например после вывода таблицы?
0
jora_xrenov
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 5
09.09.2013, 22:18 18
Цитата Сообщение от endf Посмотреть сообщение
а в какой файл тогда записывать подключение к бд? в отдельный файл и инклюдить к каждой модели? и еще, надо ли как нибудь закрывать работу с бд, например после вывода таблицы?
Отдельный класс, причем используем патерн силнгтон (одиночка)
Его подключаем в файле bootstrap.php

Дальше создаем обьект $db в конструкторе главной модели от которой наследуемся - это если мы не используем паттерн одиночка
В других моделях просто используем $db->функция из pdo;

если используем патерн одиночка то создавать в конструкторе главной модели ничего не нужно
можно сразу заюзывать допустим так $db::start()->функция из pdo;

Добавлено через 19 минут
Цитата Сообщение от endf Посмотреть сообщение
и еще, надо ли как нибудь закрывать работу с бд, например после вывода таблицы?
нет не нужно, но при желании можно
по идее это все в деструкторе можно организовать все того же главного класса модели
0
OnYourLips
506 / 356 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
16.09.2013, 21:54 19
Цитата Сообщение от jora_xrenov Посмотреть сообщение
Отдельный класс, причем используем патерн силнгтон (одиночка)
Это неверно. Антипаттерн "одиночка" не подходит для класса, работающего с БД.

Цитата Сообщение от jora_xrenov Посмотреть сообщение
Дальше создаем обьект $db в конструкторе главной модели от которой наследуемся
Это тоже неверно. Его надо не создавать там, а передовать созданную сущность.
0
jora_xrenov
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 5
22.09.2013, 06:12 20
Цитата Сообщение от OnYourLips Посмотреть сообщение
Это неверно. Антипаттерн "одиночка" не подходит для класса, работающего с БД.

Это тоже неверно. Его надо не создавать там, а передовать созданную сущность.
есть примеры которые можно посмотреть?
0
22.09.2013, 06:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 06:12

паттерн(ы)
1.Назовите паттерн(ы) для организации архитектуры программы позволяющий...

Mvc
Здравствуйте, делаю сайт на MVC. Но проблема в том, что экземпляр класса...

Mvc
Здравствуйте, у меня в mvc есть контроллер и модель. Также есть класс ядра i18n...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru