Перейти к содержимому


Партнерская программа Kredov

Паттерны программирования MVC

#1 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91
0

Отправлено 21 Май 2015 - 12:35

Здравствуйте. Начал знакомство с паттерном MVC, концепт очень понравился и чтобы его усвоить, я начал переделывать один из своих сайтов.

Принцип паттерна: контроллер, модель, представление.

Модель отвечает только за работу с данными и построена так, что ей не важно какие данные получает и какие данные передает.

Представление отвечает за вывод и отображение полученных данных на страницу браузера.

Получается, что контроллер берет на себя всю нагрузку.

 

Первым мне попался фреймворк кохана. Конечно же я ничего толком не понял, потому что там очень много файлов :)

Что бы разобраться и понять суть и принципы, я начал писать очередной велосипед и уже сейчас чувствую, что зайду в тупик. Потому что возникает много вопросов и приходится делать то, что уже давно сделано другими. К примеру, регистрация/авторизация/восстановление доступа

 

Опытные, посоветуйте как лучше поступить? Дойти к истине на своих ошибках или все же лучше разбираться с коханой и подобными?


 

 

  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#2 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 21 Май 2015 - 12:38

Я бы советовал вам начинать изучение с CodeIgniter - все проще и документации много русской. Кохана кстати это ответвление от CodeIniter =) А вот то что сайт решили свой перенести на фреймворк - это хорошо, есть на чем учиться! 


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#3 fedornabilkin

fedornabilkin
    Topic Starter
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 26 Май 2015 - 09:28

Фреймворк CodeIgniter по истине открывает огромные возможности для создания серьезного веб-приложения. Документация расписана подробно, все вроде понятно и элементарно, но тем не менее возникают вопросы.

Самый банальный - это как убрать index.php из адреса. Этот момент также расписан в подробностях, но у меня возникла загвоздка.

В мануале сказано, что в файле .htaccess необходимо прописать следующие строки (или немного другие):

RewriteEngine On
#// если файл, то отдаем файл
RewriteCond %{REQUEST_FILENAME} !-f 
#// если dir, то отдаем dir
RewriteCond %{REQUEST_FILENAME} !-d
#// все запросы прогоняем через index.php
RewriteRule ^(.*)$ /index.php/$1 [L] 

Я это сделал, но не обратил внимание, что файл .htaccess у меня лежит в директории application

Он должен лежать в корне сайта.


  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#4 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 26 Май 2015 - 09:35

Разумеется файл должен лежать в корне проекта!

 

вот вам еще пример решения ваше проблемы:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
    
    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /getpost/index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule> 

НУ и не забудьте в файле application/config/config.php установить переменную пустую

$config['index_page'] = '';

  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#5 fedornabilkin

fedornabilkin
    Topic Starter
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 26 Май 2015 - 09:45

Спасибо. Я решил проблему, все хорошо. Сейчас разбираюсь с регистрацией/авторизацией. Пробую ion_auth

Сейчас пока затык с выводом представлений. Я привык с шаблонизатором работать. Пока не пойму как встраивать представление в представление.

Например у меня есть main_view.php в котором прописан основной код страницы

<html>
<head>
</head>
<body>

</body>
</html>

Как в него вставить вид той же авторизации, к примеру?


  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#6 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 26 Май 2015 - 09:50

@fedornabilkin, Опа, опа include стайл =) 

 

Просто делаете include файла и все. 

 

Или вы хотите что бы была обертка шаблонов? Т.е в main.php вы прописали <?=$content;?> а контент подгружался нужной страницы?


Сообщение отредактировал kamchatniyoleg: 26 Май 2015 - 09:50

  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#7 fedornabilkin

fedornabilkin
    Topic Starter
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 26 Май 2015 - 10:09

Инклюды, конечно хорошо, но считаю это плохой практикой. В итоге много инклюдов и в конце концов среди концов конец найдется наконец ситуация выходит из под контроля.

К тому же концепция mvc подразумевает отделение пхп от хтмл, но тем не менее все встраивают пхпшный код в хтмл.

Или вы хотите что бы была обертка шаблонов? Т.е в main.php вы прописали а контент подгружался нужной страницы?

Да, именно так и хочу. В main скелет страницы и туда прописать стандарт

{header}, {nav}, {content}, {sidebare} предварительно обработав данные для каждого блока. 


Сейчас у меня в контроллере так выглядит

$data = array('title'=>'Главная страница сайта', 'content'=>'Контент страницы сайта');
$this->parser->parse('main_view', $data); // грузим файл отображения через шаблонизатор

И потом в файле представления подставляю {title}. Обработка через родной парсер. По сути его функционала достаточно, но ведь не правильно будет если в каждом контроллере прописывать загрузку данных меню, сайдбара... и как их туда получать?


  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#8 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 26 Май 2015 - 10:14

@fedornabilkin, Обратитесь к гуглу например с таким запросом "Smarty codeigniter 3.0" ну или что то подобное. Вам необходимо подключить шаблонизатор. Фреймворк как таковой не содержит в себе шаблонизатора.

 

НО! Шаблонизатор он интерпритирует ваши {header}, {nav}, {content}, {sidebare} точно так же в php код =) Использовать или нет шаблонизатор - дело сугубо личное для каждого!

 

@fedornabilkin, Унаследуйте класс main_controller ( например ) в котором укажите все основные переменные которые должны быть доступны у вас на всех страницах 


Сообщение отредактировал kamchatniyoleg: 26 Май 2015 - 10:14

  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#9 fedornabilkin

fedornabilkin
    Topic Starter
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 26 Май 2015 - 13:59

Унаследуйте класс main_controller ( например ) в котором укажите все основные переменные которые должны быть доступны у вас на всех страницах 

Сделал MY_Controller, уже более менее получается, но основной вопрос не решен.

Задача получить сформированный контент с подставленными данными в представление, но не вывести его в браузер, а присвоить переменной.

Когда я подставляю данные в представление, то  код автоматом отдается в браузер.

$this->load->view('page/add_page', $this->data);

Как же сделать, что бы данные скомпилировать с использованием представления, но не отдавать в браузер, а обработать самостоятельно.

Такой вариант не катит, потому что сформированный код отдается браузеру

$this->load->view('page/add_page', $this->data);
$this->data['content'] = $this->output->get_output();

  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#10 fedornabilkin

fedornabilkin
    Topic Starter
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 26 Май 2015 - 16:48

Никак не могу прикрутить HMVC. CI версии 2.2.2

@kamchatniyoleg, может есть актуальные файлы CI и Modular Expression? 


  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru