<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

После прохождения курса Вы без труда сможете создавать любые сайты с использованием фреймворка Yii, причём делать это будете быстро и качественно.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Компонентный (блочный) подход

Компонентный (блочный) подход

В предыдущей статье мы с Вами обсуждали отличный подход MVC. Отличный не с точки зрения практики применения, сколько с точки зрения самой концепции. И более развитым решением, которое уже очень часто применяется на практике, является компонентный (блочный) подход.

В компонентом подходе остаются всё те же 3 элемента: Model, View и Controller. Но очень важное отличие: в чистом MVC пользователь обращался к Controller, однако, гораздо логичнее обращаться к View. И как раз в компонентом подходе идёт обращение именно к указанному элементу.

Второй важнейшее отличие состоит в том, что Controller разбивается на несколько частей, компонентов, каждый из которых отвечает за свою часть. Например, блок с новостями, панель пользователя, блок с комментариями и так далее. Разумеется, вся обработка идёт в соответствующем блоке. Например, если нужно обработать добавление нового комментария, то эта обработка помещается в компонент, отвечающий за комментарии. А не всё в одну кучу, как это было в MVC (когда вся обработка отправлялась в 1 файл, controller.php).

Давайте с Вами разберём компонентный подход на примере из прошлой статьи. Начнём с файла index.php, принадлежащий Шаблону.

<h2>Комментарии</h2>
require_once "comments.php"; // Подключение компонента, отвечающего за комментарии
<?php
  for ($i = 0; $i < count($comments); $i++) {
    echo "<li><b>".$comments[$i]["name"].":</b> ".$comments[$i]["text"]."</li>";
?>

Теперь рассмотрим файл comments.php, отвечающий за комментарии:

<?php
  require_once "model.php"; // Подключаем Модель
  /* Здесь может быть обработка различных форм, относящихся к комментариям */
  $comments = getComments(); // Некая функция в Модели, возврающая двумерный массив с комментариями
?>

Может показаться, что ничего не изменилось. Ведь остался тот же PHP-код в файлах Шаблона. Однако, нам удалось сделать так, чтобы дизайнер и только дизайнер решал, какие блоки и где выводить. Это очень значимый результат. Теперь дизайнер может в своём Шаблоне, взять весь этот код подключения комментариев и переставить в другое место или, например, вообще удалить. В то же время, если программист придумает какой-то более быстрый способ получения комментариев, он спокойно исправит Model, никак не изменяя View.

Данный способ идеален для небольших сайтов, например, сайтов-визиток. Однако, минусы у данного способа имеются:

  • По-прежнему, остался PHP-код в Шаблоне.
  • Для больших сайтов данный способ не подойдёт. Ведь у сайта есть множество повторяющихся элементов, например, шапка сайта (не просто одна картинка, а некоторая структура HTML-кода). И если потребуется изменить её, то потребуется менять все страницы вручную. А если их будет 1000?

В связи с этими минусами, были придуманы Шаблонизаторы, которые лишены этих двух минусов. Их существует большое количество, например, Smarty, но я Вам рекомендую создать свой. В любом случае, у каждого Шаблонизатора будут свои минусы. Например, наличие служебных конструкций в Шаблоне (именно служебных конструкций, а не PHP-кода), которые являются тем же кодом, просто в виде HTML-комментариев, который в Шаблонизаторе преобразуется в PHP-код. Либо если вынести всю обработку в Шаблонизатор, оставив идеально чистый Шаблон с только HTML-кодом без всяких служебных конструкций, то тогда придётся смириться с некоторой зависимостью программной части и внешнего вида. Это означает, если принципиально изменить вывод чего-либо (например, был выпадающий список, а теперь нужно вывести всё в теге <p>), то придётся изменять программную часть.

Но в любом случае, именно Шаблонизатор Вы и должны использовать для создания крупных проектов. Можете использовать уже готовый, прочитать документацию и использовать, а можете написать свой собственный, как это сделал я. Безусловно, он также не лишён недостатков. Но, кто знает, быть может именно Вы создадите идеальный Шаблонизатор, тем самым, мгновенно прославившись в кругу программистов.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (14):

malina95 malina95 24.12.2012 20:35:22

Михаил, а почему если писать в статическом стиле то конструктор не работает и выдаёт ошибку?

Ответить

Admin Admin 24.12.2012 21:01:58

Что за ошибка и что за конструктор?

Ответить

malina95 malina95 26.12.2012 14:36:31

И опять мне не пришло письмо об ответе на комментарий... Вообщем если я пишу в конструкторе строчку self::$db = new mysqli("localhost", "Admin", "udiram04", "hosting"); то выдаёт ошибку что метод self::$db->query не найден

Ответить

Admin Admin 26.12.2012 19:29:40

А на конструктор не ругается?

Ответить

malina95 malina95 26.12.2012 19:44:14

Нет, может мне бросить пока статические методы и попробовать всё таки $this?

Ответить

Admin Admin 26.12.2012 19:46:26

А какая именно ошибка на query() возникает? Прямо текст скопируйте.

Ответить

malina95 malina95 27.12.2012 19:07:08

Fatal error: Zip:__construct($db), none object error:__construct($db); Странная ошибка которую я никогда не видел, возможно и вы тоже её никогда не видели

Ответить

Admin Admin 27.12.2012 19:47:09

Впервые вижу такую ошибку, Вы, видимо, какой-то чужой класс используете, и вот из него уже и идут эти ошибки. По крайней мере, self::$db - это правильно, и self::$db->query() тоже прекрасно должен работать.

Ответить

malina95 malina95 27.12.2012 20:01:11

Я использую ваш класс из курса, мне друг скопировал его на флешку, я просил у него дать полностью курс но он отказался, сказал сам покупай... Я бы с удовольствием купил но денег даже на новый год нету... вообщем попроюуй сам разобраться с этим классом. И всё таки советую выложить класс для бд для всех, и использование каждого метода, будет очень удобно для всех, вы согласны со мной?

Ответить

vit-lja vit-lja 07.03.2013 11:41:00

Добрый день! У меня возникла вот какая проблема при использовании данного метода слетает CSS (допустим не могу прижать заголовки к верхней границе поля таблицы, или при вставке картинок(кнопок) тоже получается разрыв), а если использовать без блоков то все работает корректно

Ответить

Admin Admin 07.03.2013 21:22:56

Используйте кодировку UTF-8 без BOM.

Ответить

vit-lja vit-lja 07.03.2013 21:49:06

Спасибо, помогло.

Ответить

Alexey0112358 Alexey0112358 07.10.2013 14:51:17

Михаил, скажите, пожалуйста, где формировать tpl файлы? В index.php или comments.php в этом примере? Выводь, как я понимаю, в index.php.

Ответить

Admin Admin 07.10.2013 21:52:04

Зависит от движка. По-разному можно.

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.