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
Форумы портала PHP.SU :: Версия для печати :: ООП в php c MVC
Форумы портала PHP.SU » » Объектно-ориентированное программирование » ООП в php c MVC

Страниц (1): [1]
 

1. juramaj - 16 Декабря, 2014 - 15:50:32 - перейти к сообщению
Доброго всем времени суток уважаемые форумчане! Вот начал изучать ООП в php с использованием MVC. И у меня возник вопрос: как сделать если например
пользователь авторизировался через форму авторизации, то он не мог зайти на страницу где размещена регистрация и авторизация. Кто знает, где должна обрабатываться такова логика.
И как вывести другой вид, вместо например формы авторизации.
2. DeepVarvar - 16 Декабря, 2014 - 15:57:41 - перейти к сообщению
Обрабатывать прямо в контроллере залогинивания.
Если пользак уже залогинен - показать шиш, или разлогинить автоматом, может он под другим акком зайти хочет.
3. juramaj - 16 Декабря, 2014 - 17:08:42 - перейти к сообщению
Спасибо, с этим понятно. А если у меня например основная часть сайта разделена на две части. 1-я это левый "сайдбар"(где находится форма авторизации и кнопка на страницу регистрации) и 2-я часть это основной контент (который меняется
в зависимости от юзания по ссылкам). Суть вопроса такова: где мне обрабатывать логику относительно сайдбара, что выводить на экран пользователя.(Либо форму авторизации либо приветствие например "Приветствуем Вас admin" и кнопка выхода).
4. DeepVarvar - 16 Декабря, 2014 - 17:31:04 - перейти к сообщению
По условию в шаблоне:
PHP:
скопировать код в буфер обмена
  1. <?PHP if ($user->isAuth()) { ?>
  2.     Привет пользак!
  3. <?PHP } else { ?>
  4.     Надо бы войти в систему!
  5. <?PHP } ?>
5. Bio man - 16 Декабря, 2014 - 17:34:37 - перейти к сообщению
juramaj пишет:
где мне обрабатывать логику относительно сайдбара
Для таких целей я бы внедрил виджеты. Но только с условием того, что модели используются по назначению, например, аутентификация юзера, это как раз задача модели.
В таком случае избегаем дублирования логики авторизации (вообще от неё избавляемся) в контроллере и в виджете.
Если же, часть бизнес логики выполняют контроллеры, то нужно пересмотреть архитектуру и соответствующим образом провести рефакторинг.
Или начать с нуля.
6. DeepVarvar - 16 Декабря, 2014 - 17:55:06 - перейти к сообщению
Bio man пишет:
аутентификация юзера, это как раз задача модели
Я тебя кажись поймал ))
Не путай человека - задача задачей, а всеравно в нужную дырочку клиент должен постучаться, e.g.: /login
Или должен стоять глобальный обработчик прилетевшего POSTа аутенфикации на любой странице.
В любом случае - модель пользака не должна "слушать эфир", этим занимается роут с контроллерами.
7. juramaj - 16 Декабря, 2014 - 18:00:10 - перейти к сообщению
Так то понятно, но есть одно "Но". В первых много читал об MVC и там пишут что логика должна обрабатываться в модели а не в представлении. В самом коде я сделал так как раньше делал. Но сейчас мне нужно отделить логику от представления. Может вместо той логики что у меня в <div class="left_sidebar"> создать обьект сласса контроллера, а уже в нем разделить логику от представления. Как относительно MVC будет правильно?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if(isset($_POST['logoff'])){
  3.         unset($_SESSION['login']);
  4.         unset($_SESSION['password']);
  5.         unset($_SESSION['id']);
  6. }
  7. ?>


CODE (html):
скопировать код в буфер обмена
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3.     <head>
  4.                 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5.                 <link rel="stylesheet" type="text/css" href="/css/style.css" />
  6.                 <title>Простой блог</title>
  7.     </head>
  8.     <body>
  9.                 <div class="hoh">
  10.                         <div class="header">
  11.                                 <div class="logo"><img src="images/header.png" alt="логотип" width="250px;" height="82px;"></div>
  12.                                 <div class="menu">
  13.                                         <ul>
  14.                                                 <li><a href="/">Главная</a></li>
  15.                                                 <li><a href="/servis">Услуги</a></li>
  16.                                                 <li><a href="/station">Статьи</a></li>
  17.                                                 <li><a href="/arbeit">Как мы работаем</a></li>
  18.                                                 <li><a href="/contacts">Контакты</a></li>
  19.                                         </ul>
  20.                                 </div>
  21.                         </div>
  22.                         <div class="content">
  23.                                 <div class="left_sidebar">
  24.                                 <?php
  25.                                     if ($_SESSION['login'] == true)
  26.                                         {
  27.                                             echo '<center><b>Личный кабинет</b></center>';
  28.                                             echo 'Приветствуем Вас&nbsp;<b>'.$_SESSION['login'].'</b>';
  29.                                                 echo '<form action="" method="POST">
  30.                                                             <input type="submit" name="logoff" value="Выйти" style="text-align:left;"/>
  31.                                                       </form>';
  32.                                         }
  33.                                         else
  34.                                         {
  35.                                             echo "<a href='/reg'>Регистрация</a><a href='/auch'>Вход</a>";
  36.                                         }
  37.                                 ?>
  38.                                
  39.                                    <!-- <a href='/reg'>Регистрация</a>
  40.                                     <a href='/auch'>Вход</a> -->
  41.                                
  42.                                 </div>
  43.                                 <div class="content_content">
  44.                                         <?php include 'application/views/'.$content_view; ?>
  45.                                 </div>
  46.                         </div>
  47.                 </div>
  48.  
  49.                         <div class="footer">Copyright 2014</div>
  50.                 </div>
  51.         </body>
  52. </html>
8. DeepVarvar - 16 Декабря, 2014 - 18:12:39 - перейти к сообщению
Да нормально, в шаблонах можно простые условия лепить.
9. Bio man - 16 Декабря, 2014 - 18:16:44 - перейти к сообщению
DeepVarvar пишет:
модель пользака не должна "слушать эфир", этим занимается роут с контроллерами.
полностью согласен. Но ты меня не так понял.
Модель лишь принимает данные, валидирует их, и если нужно, выполняет какую либо бизнес логику.
На примере. Есть глобальный роут /login. Контроллер отвечающий за этот роут должен передать данные моделе и вызвать метод login, если все данные корректны.
Если запрос послан с виджета, то я вижу 2 варианта.
1. посылать на глобальный /login
2. посылать на контроллер виджета.

Оба контроллера занимаются передачей данных моделе, а модель делает всю грязную работу с аутентификацией.
(Добавление)
Bio man пишет:
а модель делает всю грязную работу с аутентификацией.
или делегирует класс User, в котором и происходит магия аутентификации, и если надо, авторизации.
Подсмотрел в Yii2 Улыбка

 

Powered by ExBB FM 1.0 RC1