Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Подкиньте примерчик кода MVC


Автор: nIkTo 29.11.2010, 12:12
Разбираюсь с MVC в PHP, перечитал много статей, но толково рабочего кода не нашёл, может из за того что не до конца понял структуру MVC. Прошу линк на код MVC не большого проекта. http://www.google.com/codesearch

Автор: Guedda 29.11.2010, 14:24
Возьми любой фреймворк (Zend, Kohana), и посмотри, как там все реализовано.

Автор: Warpkid 29.11.2010, 14:27
Не знаю конечно, это ли тебе надо, но:
http://www.phpro.org/tutorials/Model-View-Controller-MVC.html 
Внизу есть линк на исходники

Добавлено через 1 минуту и 44 секунды
Цитата

Возьми любой фреймворк (Zend, Kohana), и посмотри, как там все реализовано. 


оО 
Пардон, но брать Zend и пробовать разобраться в нем, как и что там реализовано - это садомазохизм.

Автор: SamDark 29.11.2010, 15:07
http://rmcreative.ru/blog/post/mvc-view
http://rmcreative.ru/blog/post/mvc-front-controller-controller-i-router

Автор: nIkTo 29.11.2010, 16:25
Warpkid, SamDark, спасибо за ссылки посмотрел, примерно такие статьи и посты я и читал, кстати http://www.phpro.org/tutorials/Model-View-Controller-MVC.html есть рерайт на русском http://habrahabr.ru/blogs/php/31270/.
Хотелось бы полноценного примера, с аутентификацией, сессиями, работой с БД, но и лезть в сложные фреймворки думаю пока нет смысла, так как в таких дебрях я точно заблужусь.

Автор: nIkTo 4.12.2010, 12:12
Так и не нашёл нормального примера аутентификации в MVC =(
Может кто ссылку на код дать ?

Автор: Muerto 4.12.2010, 12:29
nIkTo, на YII глянь, у них базовый пример эт блог

Автор: nIkTo 4.12.2010, 12:39
Muerto, очень много кода, скил пока не тот у меня. Нужно что-то проще.

Автор: Muerto 4.12.2010, 13:10
делаешь контроллер авторизация, далее добавляешь разные действия, как восстановление пароля, вход, страница не верного пароля...
Если понятна основа то в чем проблема?

/auth/login
/auth/recpass
/auth/fail/err/4

и тп.

Автор: nIkTo 4.12.2010, 13:41
Создаю такую структуру:
/login
/logout
/page1
/page2
/page3

для того чтобы смотреть page1, page2, page3 необходима авторизация.
Так вот вопрос где проверять прошёл ли пользователь аутентификацию ?

то есть заходит пользователь на /page2 роутер вызывает контроллер page2 с дефолтным действием index, а вот где проверить надо ли вызывать котроллер или делать редирект на /login ....

в общем как говорится лучше один раз увидеть чем ...

Автор: Muerto 4.12.2010, 14:20
Ну возможно есть какие то супер хитрые способы к примеру, создать таблицу прав доступа, и если сессии нету и раутер твой получает защищенную страницу, то на логин послать...

А так просто проверяешь сессию где угодно... в контроллере твоей страницы к примеру...

Автор: nIkTo 4.12.2010, 14:29
Muerto, тоесть, если пользователь запрашивает /page1 то код:

1. Стартует сессию
2. Обрабатывает url и вызывает контроллер page1
3. В конструкторе контроллера проверяем есть ли $_SESSION['password'] и $_SESSION['username'] если нет то пишем header('Location: /login');

так ?

Автор: SamDark 4.12.2010, 15:11
Стартовать сессию надо вообще всегда. Остальное так же.

Автор: ksnk 4.12.2010, 16:38
Цитата(SamDark @  4.12.2010,  15:11 Найти цитируемый пост)
Стартовать сессию надо вообще всегда

не всегда, а только когда есть кука или параметр с именем session_name(). Ну или когда действительно нужно стартовать сессию - при авторизации, например.

Автор: nIkTo 4.12.2010, 17:56
 smile  smile  smile  smile  smile  smile 

Автор: S.A.P. 4.12.2010, 21:57
Цитата(nIkTo @ 4.12.2010,  13:41)
Создаю такую структуру:
/login
/logout
/page1
/page2
/page3

для того чтобы смотреть page1, page2, page3 необходима авторизация.
Так вот вопрос где проверять прошёл ли пользователь аутентификацию ?

то есть заходит пользователь на /page2 роутер вызывает контроллер page2 с дефолтным действием index, а вот где проверить надо ли вызывать котроллер или делать редирект на /login ....

в общем как говорится лучше один раз увидеть чем ...

Зависит от того, к чему тебе нужно ограничить доступ. К конкретному адресу или контроллеру который к нему прикручен, а может исходя из каких - то внутренних правил, специфичных для контроллера. В первом случае пользователя можно обломать на этапе роутинга, в остальных - проверку можно производить и в контроллере. 
Ежели ты ломаешь голову над тем как хранить и обрабатывать структуру прав - покопай в сторону ACL

Автор: SamDark 5.12.2010, 02:59
Или RBAC.

Автор: nIkTo 5.12.2010, 11:14
Нужна просто аутентификация ни каких ролей или разграничения прав среди аутентифицированных нету.

Автор: Muerto 5.12.2010, 13:29
Ну можно так сделать:

Код

$rights=array('secure','private','comment');

if(in_array(current_page,$rights) && !isset($_SESSION['auth'])){
//do some redirecting....
}else{
      //call controller
}



Ну а дальше немного воображения и экспериментирования...

Это ты в свой раутер запихать можешь...

За святое брать не стоит ибо на скорую руку накидал  smile 

Автор: bars80080 7.12.2010, 17:40
Цитата(ksnk @  4.12.2010,  15:38 Найти цитируемый пост)
стартовать сессию нужно всегда

не всегда, а только когда есть кука или параметр с именем session_name()

почему только когда есть кука или параметр с именем session_name()?
я вот смотрю, параметр с именем session_name() есть всегда

Автор: ksnk 7.12.2010, 19:05
Цитата(bars80080 @  7.12.2010,  17:40 Найти цитируемый пост)
почему только когда есть кука или параметр с именем session_name()?
я вот смотрю, параметр с именем session_name() есть всегда 


Код

if(isset($_GET[session_name()]) or isset($_COOKIE[session_name()])) {
   start_session();
}

что-то вроде такого...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)