Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/67: Рейтинг темы: голосов - 67, средняя оценка - 4.63
 Аватар для Linked
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677

Пример структуры сайта на MVC

30.03.2014, 10:07. Показов 12587. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня понятие MVC несколько "расплывчатое", хотелось бы увидеть на примере, в основном это предлагают в видеоуроках, но хотелось бы не только увидеть пример но и обсудить его.
Например я пишу "какой нибудь" сайт, которые содержит: контент (статич. часть. Вопрос: лучше его подгружать из БД или в файлах хранить), форма входа/регистрация/форма восстановления пароля, Персональные настройки (учётных записей) + возможность оставлять/редактировать/удалять записи на стене у других пользователей. Предположим я для этого "проекта" использую img,js (jq и пр.), css и т.д. Хочу использовать для этого проекта "templates" (шаблоны, разделить верхнюю часть, левый, средний блок ну и тому подобное (думаю это не столь важно).. Можете привести пожалуйста краткий пример того, какую структуру бы следовало выбрать для такого "проекта"?(ну, исходя из того что код собираюсь катать не процедурный а ООП). т.е. куда нужно пихать шаблоны, php скрипты и запросы в БД?
Прошу извинить меня если в чём то неясно выразился. Просто хочу увидеть "примерную" структуру такого сайта с применением MVC.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2014, 10:07
Ответы с готовыми решениями:

Пример java mvc
Напишите пожалуйста пример реализации mvc на java Т.е. например есть простая форма с кнопкой, есть класс обработки логики и есть...

MVC дайте пример
Столько прочитал книг и статей про этот шаблон,прочитал так же про другие шаблоны GoF...все понимаю,а применить не могу:confused: Все...

Реальный пример MVC
Здравствуйте. Подскажите пожалуйста реальный пример приложения с MVC и как его (этот паттерн) можно нарушить или не соблюсти? В моем...

20
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
30.03.2014, 12:46
Цитата Сообщение от Linked Посмотреть сообщение
Просто хочу увидеть "примерную" структуру такого сайта с применением MVC.
кто как хочет так и пишет. Главное что бы оно все отдельно было. Начните делать, а в процессе увидите что и где надо переместить.
1
 Аватар для Linked
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
30.03.2014, 17:01  [ТС]
Drygba, просто не хотелось бы допускать "популярных" ошибок среди "быдло кодеров" и пр.
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
30.03.2014, 17:16
Благодаря тому что вам сейчас натыкают советов или вы будете сидеть и читать кучу статей, вы не станете лучше писать, строить.
Начинайте создавать проект, в процессе многое прояснится. Создали начало - выложите, спросите совета - вам укажут где и что не так.
Пишите, пишите, пишите....
1
 Аватар для Linked
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
05.04.2014, 07:58  [ТС]
admin
view
---css
---js
---img
configs
---CONFIG_SITE.INI
classes
---class.db.php
---class.user.php
templates
---default
index.php
user.php
и т.д. файлы.
Как такая структура, как лучше её сделать?
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
05.04.2014, 11:27
я бы сделал так
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
core
   controller
       - классы контролера
   model
       - классы модели
   resources
      - controller
          - abstract.php
      - model
          - abstract.php
      - resources.php
      - hepler.php
public
   ---css
   ---js
   ---img
index.php
1
10 / 10 / 5
Регистрация: 21.07.2013
Сообщений: 102
05.04.2014, 13:16
раз тут такая тема, тоже спрошу про MVC (тем более вопрос по теме автора):

правильно ли я понимаю, что типичная структура выглядит примерно так:

Роутер - здесь разбирается url, подключаются файлы контроллера и модели(если нужно). Затем, если запрошенный метод контроллера есть, он вызывается. Если нет, показываем ошибку.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
class Route
{
 
    static function start() {
    
        $page = 'main';
        $action = 'index';
        
        $routes = explode('/', $_SERVER['REQUEST_URI']);
 
        if ( !empty($routes[1]) )   {   
            $page = $routes[1];
        }       
        if ( !empty($routes[2]) )   {
            $action = $routes[2];
        }
    
        if(file_exists('application/model/'.$page.'.php')) {
            include "application/model/".$page.'.php';
        }       
        if(file_exists('application/control/'.$page.'.php')) {
            include "application/control/".$page.'.php';
        }
        else {
            Route::ErrorPage404();
        }
        $controller_name = $page.'Controller';
        $control = new $controller_name;
        
        if(method_exists($control, $action))    {
            $control->$action();
        }
        else {
            Route::ErrorPage404();
        }   
    }
 
    function ErrorPage404()  {
        header('HTTP/1.1 404 Not Found');
        header("Location:'/404");
    }
    
}
Родительский контроллер:
PHP
1
2
3
4
5
6
7
8
class Controller {  
    public $model;
    public $view;
    
    function __construct()  {
        $this->view = new View();
    }
}
Родительский вид:
PHP
1
2
3
4
5
6
7
8
9
10
class View
{
    /*  $content_file - виды отображающие контент страниц;
    $template_file - общий для всех страниц шаблон;
    $data - массив, содержащий элементы контента страницы. Обычно заполняется в модели. */
    
    function generate($content_view, $template_view, $data = null)  {
        include 'application/views/'.$template_view;
    }
}
Пользовательский контроллер, здесь мы создаем экземпляр модели (если это нужно) и вызываем отображение, подключая нужные шаблоны :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
class Controller_Portfolio extends Controller
{
    function __construct()  {
        $this->model = new Model_Portfolio();
        $this->view = new View();
    }
    
    function action_index() {
        $data = $this->model->get_data();       
        $this->view->generate('portfolio_view.php', 'template_view.php', $data);
    }
}
Является ли такая схема типичной, при расширении могут быть какие-то проблемы?
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
05.04.2014, 15:00
Цитата Сообщение от ячсмит Посмотреть сообщение
PHP
1
2
3
4
5
6
if(file_exists('application/model/'.$page.'.php')) {
            include "application/model/".$page.'.php';
        }       
        if(file_exists('application/control/'.$page.'.php')) {
            include "application/control/".$page.'.php';
        }
для этого есть метод автозагрузки и метод spl_autoload_register

Цитата Сообщение от ячсмит Посмотреть сообщение
Родительский контроллер:
Цитата Сообщение от ячсмит Посмотреть сообщение
Родительский вид:
это не родительские классы а не до разумение
Цитата Сообщение от ячсмит Посмотреть сообщение
здесь мы создаем экземпляр модели (если это нужно)
что значит если надо? как вы себе представляете использование родительского класса в проекте?
Цитата Сообщение от ячсмит Посмотреть сообщение
при расширении могут быть какие-то проблемы?
сейчас это все проблема
0
 Аватар для Linked
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
05.04.2014, 19:25  [ТС]
Drygba, спасибо большое! Именно это я и хотел увидеть
0
10 / 10 / 5
Регистрация: 21.07.2013
Сообщений: 102
05.04.2014, 20:20
Цитата Сообщение от Drygba Посмотреть сообщение
это не родительские классы а не до разумение
а что вообще должно быть в родительских классах? что-то такое, что для всех пользовательских классов нужно, наверное. т.к. подключение шаблонов можно в роутере сделать и $model там же объявить как static по идее.
Цитата Сообщение от Drygba Посмотреть сообщение
что значит если надо? как вы себе представляете использование родительского класса в проекте?
ну не во всех контроллерах нужно подключать модель же, например, /404 или /contacts, просто выводим нужный шаблон

Вы могли бы на словах описать примерную правильную структуру?
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
05.04.2014, 23:18
Цитата Сообщение от ячсмит Посмотреть сообщение
и $model там же объявить как static по идее.
Нет.

Цитата Сообщение от ячсмит Посмотреть сообщение
ну не во всех контроллерах нужно подключать модель же, например
Почему ты говоришь о модели в единственном числе?
Обычно в контрллерах используется 1-2 модели. Если больше, то уже что-то не так.

Цитата Сообщение от ячсмит Посмотреть сообщение
Вы могли бы на словах описать примерную правильную структуру?
Начни писать на фреймворках. Тебе правильная структура будет автоматически сгенерирована.
0
 Аватар для Linked
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
06.04.2014, 16:05  [ТС]
Drygba, а что хранится в каталоге "resources", т.е. за что он отвечает?
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
06.04.2014, 18:39
Цитата Сообщение от Linked Посмотреть сообщение
а что хранится в каталоге "resources", т.е. за что он отвечает?
за ресурсы, БД, кеш ...
1
 Аватар для Linked
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
07.04.2014, 11:10  [ТС]
Drygba, можете привести пример?
всм что есть ресурсы, и кэш чего именно? (всмысле зависит от того приложения что я пишу), или что то ещё?
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
07.04.2014, 12:04
Цитата Сообщение от Linked Посмотреть сообщение
кэш чего именно?
кеш. Что вы подразумеваете под - чего именно?
Цитата Сообщение от Linked Посмотреть сообщение
всм что есть ресурсы
Цитата Сообщение от Drygba Посмотреть сообщение
БД, кеш ...
0
 Аватар для Linked
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
07.04.2014, 13:08  [ТС]
Drygba, вы можете привести какой нибудь пример или дать ссылку? Я просто таким в веб ещё ни разу не пользовался
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
07.04.2014, 14:58
Цитата Сообщение от Linked Посмотреть сообщение
вы можете привести какой нибудь пример
более точно опишите пример чего вы хотите
0
 Аватар для pdbq
18 / 18 / 7
Регистрация: 15.09.2010
Сообщений: 133
11.04.2014, 08:46
мой вам совет, пройдите курс [ссылки на коммерческие ресурсы не приветствуются]. команда профес.разжевывают все до мелочей. после этого мир mvc распахнет перед вами все двери

Не по теме:

насколько я помню уроки у них очень хорошие были

0
 Аватар для Linked
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
13.04.2014, 12:58  [ТС]
pdbq, хотелось бы начать с основ, а более подробное потом рассматривать (после практики и запоминания основного). У меня так лучше всё осваивается. Хотя может это и не правильно
0
4 / 4 / 1
Регистрация: 06.03.2014
Сообщений: 85
28.04.2014, 01:11
Я делал так:
Модель:
есть системный класс, который управляет всем. Есть класс-страница, котороя все про себя знает.
Вид:
есть шаблоны вот один из них(Шаблон подкатегорий в категории "Новости"):
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<a href="<?=$page->gethref()?>" title="<?=$page->getintro()?>" style="color: rgb( 255, 255, 255 ); text-decoration: none;">
<div style="height: 250px;
            width: 240px; 
            background-color: #1e1f23; 
            position: relative;
            float: left;
            margin-left: 48px; 
            margin-top: 40px;
            padding: 10px;
            box-shadow: 0 0 20px rgba(0,0,0,0.5);" 
            align="center" >
    <hi><?=$page->getshort_title()?></hi><br>
    <p style="align: center;"><img src="Images/<?=$page->getsmall_image();?>" alt="<?=$page->getintro()?>" style="width: 150px; height: 150px;  display: block; position: relative; margin: auto auto;"></p>
    <p align="left"><?=$page->getintro()?></p>
</div></a>
Контроллер:
И есть контроллер(не ТТУК):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<? 
function output($templ, $arr=null)//контроллер
{
    $folder = 'templates/';
    if(is_array($arr))
        $data=(object)$arr;
    else
        $page = $arr;
    ob_start();
    include $folder.$templ.'.php';
    return ob_get_clean();
}
?>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2014, 01:11
Помогаю со студенческими работами здесь

Использование слайдера в mvc: нужен пример
Всем привет!!! Ребята есть у кого примерчик или ссылка на информацию как в мою страницу на asp mvc встроить слайдер на яваскрипте....

Пример приложения ASP.NET MVC
Есть ли подробный, пошаговый и современный пример нетривиального приложения на MVC 5? Имею ввиду сервис, интересные сайты пр. Есть неплохой...

Примитивный пример грамотной архитектуры (MVC, MVP)
Я совсем новичок в Qt, изучаю второй день, вчера купил книгу Шлее. Вот написал примитивнейшее приложение, складывающее два числа....

Нужен пример применения паттернов MVC, MVP, MVVM
Я знаю, что они из себя представляют. Но что-то нахожу в них одни неудобства. Эксперимента ради запустил пару проектов - один пишу как...

Реализация структуры приложения mvc
Здравствуйте, проконсультируйте пожалуйста по нескольким вопросам, связанным со структурой реализации проекта. У меня есть БД и её модель...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru