X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Паттерны программирования MVC
fedornabilkin
fedornabilkin
Topic Starter сообщение 21.5.2015, 13:35; Ответить: fedornabilkin
Сообщение #1


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

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

Опытные, посоветуйте как лучше поступить? Дойти к истине на своих ошибках или все же лучше разбираться с коханой и подобными?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kamchatniyoleg
kamchatniyoleg
сообщение 21.5.2015, 13:38; Ответить: kamchatniyoleg
Сообщение #2


Я бы советовал вам начинать изучение с CodeIgniter - все проще и документации много русской. Кохана кстати это ответвление от CodeIniter =) А вот то что сайт решили свой перенести на фреймворк - это хорошо, есть на чем учиться! 
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
Topic Starter сообщение 26.5.2015, 10:28; Ответить: fedornabilkin
Сообщение #3


Фреймворк 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
Он должен лежать в корне сайта.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kamchatniyoleg
kamchatniyoleg
сообщение 26.5.2015, 10:35; Ответить: kamchatniyoleg
Сообщение #4


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

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

<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'] = '';
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
Topic Starter сообщение 26.5.2015, 10:45; Ответить: fedornabilkin
Сообщение #5


Спасибо. Я решил проблему, все хорошо. Сейчас разбираюсь с регистрацией/авторизацией. Пробую ion_auth
Сейчас пока затык с выводом представлений. Я привык с шаблонизатором работать. Пока не пойму как встраивать представление в представление.
Например у меня есть main_view.php в котором прописан основной код страницы

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

</body>
</html>

Как в него вставить вид той же авторизации, к примеру?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kamchatniyoleg
kamchatniyoleg
сообщение 26.5.2015, 10:50; Ответить: kamchatniyoleg
Сообщение #6


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

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

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


Сообщение отредактировал kamchatniyoleg - 26.5.2015, 10:50
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
Topic Starter сообщение 26.5.2015, 11:09; Ответить: fedornabilkin
Сообщение #7


Инклюды, конечно хорошо, но считаю это плохой практикой. В итоге много инклюдов и в конце концов среди концов конец найдется наконец ситуация выходит из под контроля.
К тому же концепция mvc подразумевает отделение пхп от хтмл, но тем не менее все встраивают пхпшный код в хтмл.
(kamchatniyoleg @ 26.5.2015, 12:50) *
Или вы хотите что бы была обертка шаблонов? Т.е в main.php вы прописали а контент подгружался нужной страницы?

Да, именно так и хочу. В main скелет страницы и туда прописать стандарт
{header}, {nav}, {content}, {sidebare} предварительно обработав данные для каждого блока. 
Сейчас у меня в контроллере так выглядит

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

И потом в файле представления подставляю {title}. Обработка через родной парсер. По сути его функционала достаточно, но ведь не правильно будет если в каждом контроллере прописывать загрузку данных меню, сайдбара... и как их туда получать?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kamchatniyoleg
kamchatniyoleg
сообщение 26.5.2015, 11:14; Ответить: kamchatniyoleg
Сообщение #8


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

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

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


Сообщение отредактировал kamchatniyoleg - 26.5.2015, 11:14
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
Topic Starter сообщение 26.5.2015, 14:59; Ответить: fedornabilkin
Сообщение #9


(kamchatniyoleg @ 26.5.2015, 13:14) *
Унаследуйте класс 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();
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
Topic Starter сообщение 26.5.2015, 17:48; Ответить: fedornabilkin
Сообщение #10


Никак не могу прикрутить HMVC. CI версии 2.2.2
kamchatniyoleg, может есть актуальные файлы CI и Modular Expression? 
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Услуги программирования от команды разработчиков
3 Powinteh 3482 9.4.2023, 19:19
автор: Powinteh
Открытая тема (нет новых ответов) Перевод статей на тему программирования Анл-Рус
Нужен человек, который имеет представление, о чем пишет.
1 andreykashops 1912 14.12.2017, 21:27
автор: EvilGomel
Открытая тема (нет новых ответов) Senior/Lead ASP.NET MVC/JavaScript Software Engineer (Website Module)
0 YuliyaHR 3248 30.1.2015, 17:38
автор: -YuliyaHR-
Открытая тема (нет новых ответов) Программирование Web приложений на ASP.NET MVC (стажер)
0 YuliyaHR 2314 13.1.2015, 13:12
автор: -YuliyaHR-
Открытая тема (нет новых ответов) Услуги программирования
PHP, MySQL, JS
4 digwnews 2393 22.8.2013, 15:25
автор: digwnews


 



RSS Текстовая версия Сейчас: 29.3.2024, 18:34
Дизайн