Насколько важно MVC в PHP

166
17 января 2019, 23:00

Я тут застрял в MVC и надолго, терпение немножко не хватает. Прошелся по очень Важным вещам, то есть, как пишется модель, контроллер и т.д.. Но как сяду писать простенький интернет-магазин, то сразу теряюсь, что писать, где писать и так уже 2 месяца. Понимание есть, но по реализациям 0. Если есть хорошие ресурсы, которых я не заметил, то дайте пожалуйста!

И получится ли, если приступлю к фрейморку, например YII2, понять, что где находится. Реально немножко срываюсь(

Answer 1

В основном, MVC бывает 2 видов:

  • Толстый контроллер, тонкая модель
  • Тонкий контроллер, толстая модель

Очень много споров, что есть правильно, а что нет. Итог этих споров - несколько стандартов разработки по паттерну MVC. Полагаю, что ты уже прочел это и знаешь основы MVC, хоть и без практики. Если перейти к проекту с интернет-магазином, то у нас есть следующие модели:

  • Товар
  • Категория
  • Заказ
  • Клиент

Для наглядности, берем за основу самый базовый интернет-магазин с одним уровнем вложенности. Модель является "поставщиком" данных для контроллеров, она никак не связана с пользователями и её задача лишь управлять данными. У каждой модели есть связи (категория имеет много товаров, товар имеет одну категорию, заказ имеет несколько товаров и одного клиента, клиент имеет много заказов, товар может принадлежать нескольким заказам), наша цель - написать все эти связи в модель. К примеру, возьмем модель заказа (пишу так, как пишется на laravel, но для yii примерно так же делается):

class Order extends Model
{
  //Получаем клиента
  public function client()
  {
    return $this->belongsTo('App\Client');
  }
  //Получаем товары
  public function client()
  {
    return $this->hasMany('App\Products');
  }
}

Зачем это надо? Для того, чтобы придерживаться принципа DRY и не утолщать контроллер. Теперь представим метод контроллера, который обрабатывает запрос на получение заказа по ID:

...controller
public function show($orderId)
{ 
  $order = Order::findOrFail($orderId);     
  return view('view.name', $order);
}

Таким образом, хелпер view() рендерит пользователю view, при этом передавая туда переменную $order.

Различные вопросы защиты данных и т.д. выходят из рамок MVC и реализуются в каждом фреймворке по-разному.

Надеюсь, что это хоть немного тебе помогло :)

Answer 2

Можешь пробовать вот эти уроки:

  • Видео-курс по ООП - ссылка
  • Курс Каталог товаров на MVC - ссылка
  • статья на habr - Сайт визитка на MVC

Но а лучше, выучить Yii2, и пробовать уже на нём что-то делать. Паттерны понять иногда трудно...

Answer 3

Да, если начнёте изучать MVC вместе с фреймворком - точно не прогадаете. Я бы вам посоветовал обратить внимание на фреймворки Laravel, либо Symfony. Yii2 - хороший инструмент, но он во-первых на данный момент развивается значительно слабее первых двух, во вторых он в некоторых случаях прививает плохие практики разработки.

READ ALSO
Загрузка файла со своим именем

Загрузка файла со своим именем

При создании нового пользователя, по архитектуре сайта фото пользователя выводиться как idjpg Подскажите как при загрузке сделать так, что...

186
Шаблонизация тегов description к новостям в Drupal

Шаблонизация тегов description к новостям в Drupal

Для детальных страниц новостей необходимо заполнить тег descriptionВ description должен подставиться первый абзац из текста новости

169
Как в dataProvider сгенерировать ссылку на сортировку только ASC или DESC?

Как в dataProvider сгенерировать ссылку на сортировку только ASC или DESC?

Могу ли я средствами dataProvider сгенерировать 2 ссылки, которые буду сортировать только либо в одну либо в другую сторонуСейчас это выглядит...

179
Авто обновление чтение файла php

Авто обновление чтение файла php

Подскажите пожалуйста, получаю данные из текстового фала вот таким кодом:

128