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 :: ООП в php c MVC

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: ООП в php c MVC
juramaj
Отправлено: 16 Декабря, 2014 - 15:50:32
Post Id


Гость


Покинул форум
Сообщений всего: 98
Дата рег-ции: Дек. 2014  


Помог: 0 раз(а)




Доброго всем времени суток уважаемые форумчане! Вот начал изучать ООП в php с использованием MVC. И у меня возник вопрос: как сделать если например
пользователь авторизировался через форму авторизации, то он не мог зайти на страницу где размещена регистрация и авторизация. Кто знает, где должна обрабатываться такова логика.
И как вывести другой вид, вместо например формы авторизации.
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Декабря, 2014 - 15:57:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Обрабатывать прямо в контроллере залогинивания.
Если пользак уже залогинен - показать шиш, или разлогинить автоматом, может он под другим акком зайти хочет.
 
 Top
juramaj
Отправлено: 16 Декабря, 2014 - 17:08:42
Post Id


Гость


Покинул форум
Сообщений всего: 98
Дата рег-ции: Дек. 2014  


Помог: 0 раз(а)




Спасибо, с этим понятно. А если у меня например основная часть сайта разделена на две части. 1-я это левый "сайдбар"(где находится форма авторизации и кнопка на страницу регистрации) и 2-я часть это основной контент (который меняется
в зависимости от юзания по ссылкам). Суть вопроса такова: где мне обрабатывать логику относительно сайдбара, что выводить на экран пользователя.(Либо форму авторизации либо приветствие например "Приветствуем Вас admin" и кнопка выхода).
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Декабря, 2014 - 17:31:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




По условию в шаблоне:
PHP:
скопировать код в буфер обмена
  1. <?PHP if ($user->isAuth()) { ?>
  2.     Привет пользак!
  3. <?PHP } else { ?>
  4.     Надо бы войти в систему!
  5. <?PHP } ?>
 
 Top
Bio man
Отправлено: 16 Декабря, 2014 - 17:34:37
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




juramaj пишет:
где мне обрабатывать логику относительно сайдбара
Для таких целей я бы внедрил виджеты. Но только с условием того, что модели используются по назначению, например, аутентификация юзера, это как раз задача модели.
В таком случае избегаем дублирования логики авторизации (вообще от неё избавляемся) в контроллере и в виджете.
Если же, часть бизнес логики выполняют контроллеры, то нужно пересмотреть архитектуру и соответствующим образом провести рефакторинг.
Или начать с нуля.
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Декабря, 2014 - 17:55:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Bio man пишет:
аутентификация юзера, это как раз задача модели
Я тебя кажись поймал ))
Не путай человека - задача задачей, а всеравно в нужную дырочку клиент должен постучаться, e.g.: /login
Или должен стоять глобальный обработчик прилетевшего POSTа аутенфикации на любой странице.
В любом случае - модель пользака не должна "слушать эфир", этим занимается роут с контроллерами.
 
 Top
juramaj
Отправлено: 16 Декабря, 2014 - 18:00:10
Post Id


Гость


Покинул форум
Сообщений всего: 98
Дата рег-ции: Дек. 2014  


Помог: 0 раз(а)




Так то понятно, но есть одно "Но". В первых много читал об 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>
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Декабря, 2014 - 18:12:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Да нормально, в шаблонах можно простые условия лепить.
 
 Top
Bio man
Отправлено: 16 Декабря, 2014 - 18:16:44
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




DeepVarvar пишет:
модель пользака не должна "слушать эфир", этим занимается роут с контроллерами.
полностью согласен. Но ты меня не так понял.
Модель лишь принимает данные, валидирует их, и если нужно, выполняет какую либо бизнес логику.
На примере. Есть глобальный роут /login. Контроллер отвечающий за этот роут должен передать данные моделе и вызвать метод login, если все данные корректны.
Если запрос послан с виджета, то я вижу 2 варианта.
1. посылать на глобальный /login
2. посылать на контроллер виджета.

Оба контроллера занимаются передачей данных моделе, а модель делает всю грязную работу с аутентификацией.
(Добавление)
Bio man пишет:
а модель делает всю грязную работу с аутентификацией.
или делегирует класс User, в котором и происходит магия аутентификации, и если надо, авторизации.
Подсмотрел в Yii2 Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB