Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Yourasik
1 / 1 / 6
Регистрация: 31.05.2014
Сообщений: 171
Завершенные тесты: 1
#1

MVC маршруты и БД

21.02.2018, 13:48. Просмотров 267. Ответов 14
Метки mvc, php (Все метки)

Только начал знакомится с MVС. В сети миллион примеров как реализовать MVC модель на примере простенького сайта где как правило весь маршрут - это `news/index` и `news/1234`, делают это на основе регулярных выражений. Возможно это правильно, хотя выглядит конечно не очень. Меня интересует, как продолжить, например на сайте есть раздел "Электроника"(`somesite.com/electronika/`), если я все правильно понимаю, для этого раздела должен существовать контроллер `ElectronikaConroller` в нем `ActionIndex` метод, в котором мы вызываем "представление" главной страницы раздела "Электроника", соответственно в файле с маршрутами должен быть маршрут с ключом "Electronika". Эти разделы могут иметь `N` дочерних страниц, эти разделы из админ панели сайта необходимо создавать новые, так что для каждого раздела нужен свой контроллер или один общий, например `CatalogController`? Если один общий, тогда при переходе `somesite.com/catalog/`, получаем список каталогов (`ActionIndex`), потом `somesite.com/catalog/electronika`(`ActionSection`), получили список товаров.
На этом этапе я начинаю закипать. Меня интересует 2 вопроса :

1. Правильно ли я себе в воображении нарисовал, что существующие маршруты необходимо хранить в БД? Например есть таблица `catalogs`, и в ней поля `id, name, route` и тд. В `route` хранить ключ, например `electronika` а при переходе по ссылке `somesite.com/catalog/electronika` в контроллере `CatalogController` в методе `ActionSection` обратится к модели `Catalogs`, в которой я подключусь к БД, найду соответствие и отдам в представление результат если он есть?
2. Второй вопрос, это более глубокая вложенность, если первый хоть и не полностью понятен, но более ли менее я его могу себе представить, то тут совсем тупик. Например ссылка следующая `somesite.com/catalog/elektronika/kompyutery-i-komplektuyuschie/komplektuyuschie-i-aksesuary/moduli-pamyati/`, `catalog` - `CatalogController`, `electronika` - `ActionSection` а дальше что, как формировать более вложенные?

Код я еще не писал, вставлять нечего, прошу теорию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2018, 13:48
Ответы с готовыми решениями:

Mvc
Здравствуйте, делаю сайт на MVC. Но проблема в том, что экземпляр класса...

Принцип работы MVC
Добрый вечер! Уже часов 8 пытаюсь понять технологию MVC...

MVC. О вопросе шаблонов.
Доброго времени суток всем! Начал я потихоньку разбираться в паттерне MVC....

mvc создание динамической логики
Как я понимаю суть данного шаблона проектирования: каждый раздел имеет свой...

Найти все маршруты. Легко?
Здравствйте коллеги, повяз в задаче.... туплю второй день... Направьте в нужную...

14
Jodah
Эксперт PHP
2706 / 2378 / 1013
Регистрация: 01.08.2012
Сообщений: 8,405
21.02.2018, 14:06 #2
Цитата Сообщение от Yourasik Посмотреть сообщение
например на сайте есть раздел "Электроника"(`somesite.com/electronika/`), если я все правильно понимаю, для этого раздела должен существовать контроллер `ElectronikaConroller`
Если на сайте 100 одинаковых разделов, отличающихся только контентом (текст, картинки, ссылки на статьи и т.п.), нет смысла создавать 100 контроллеров, создаёте один общий.

Единственное, сразу с 1-го уровня начинать динамическую часть не очень удобно (больше геморроя), гораздо проще 1-ым параметром писать название контроллера, вторым id или URL статьи, т.е. site.ru/catalog/electronika, site.ru/products/iphone6s.

А когда идёт сразу site.ru/electronika, появляется промежуточная часть - нужно понять, что такое electronika - статья, товар, категория и т.п.

Цитата Сообщение от Yourasik Посмотреть сообщение
1. Правильно ли я себе в воображении нарисовал
Да.

Цитата Сообщение от Yourasik Посмотреть сообщение
2. Второй вопрос, это более глубокая вложенность
Для удобства создаёте отдельное поле типа `route_cache`и храните там полный URL раздела. Затем в админке нужно будет учесть, что при изменении URL текущего раздела также автоматом должны перегенерироваться пути всех потомков.
1
Yourasik
1 / 1 / 6
Регистрация: 31.05.2014
Сообщений: 171
Завершенные тесты: 1
21.02.2018, 16:47  [ТС] #3
Jodah, подскажите, а как реализовать когда вот такая вложенность somesite.com/catalog/elektronika/kompyutery-i-komplektuyuschie/komplektuyuschie-i-aksesuary/moduli-pamyati/, Понятно что "catalog" это имя контроллера, "electronika" это action метод, а как дальше, что делать с kompyutery-i-komplektuyuschie, komplektuyuschie-i-aksesuary, moduli-pamyati это все принимать как за параметры, то есть фильтровать запрос или еще лепить контроллеров? Я что то запутался((
0
Jodah
Эксперт PHP
2706 / 2378 / 1013
Регистрация: 01.08.2012
Сообщений: 8,405
21.02.2018, 21:01 #4
Цитата Сообщение от Yourasik Посмотреть сообщение
"electronika" это action метод
В данном случае можно сделать один метод для всего. У вас ведь всего 2 ситуации - либо после /catalog/ ничего нет и отображаем список разделов, либо что-то есть и отображаем конкретный раздел.

Цитата Сообщение от Yourasik Посмотреть сообщение
это все принимать как за параметры, то есть фильтровать запрос или еще лепить контроллеров?
Зачем? Между /catalog/elektronika/ и /catalog/elektronika/kompyutery/ нет никакой разницы, просто берите текущий URL (только без гет-параметров) и ищите по нему категорию в БД.
0
полудух
145 / 161 / 42
Регистрация: 15.03.2016
Сообщений: 987
22.02.2018, 10:20 #5
Цитата Сообщение от Yourasik Посмотреть сообщение
Jodah, подскажите, а как реализовать когда вот такая вложенность somesite.com/catalog/elektronika/kompyutery-i-komplektuyuschie/komplektuyuschie-i-aksesuary/moduli-pamyati/, Понятно что "catalog" это имя контроллера, "electronika" это action метод, а как дальше, что делать с kompyutery-i-komplektuyuschie, komplektuyuschie-i-aksesuary, moduli-pamyati это все принимать как за параметры, то есть фильтровать запрос или еще лепить контроллеров? Я что то запутался((
геморройный урл так то, много пота, мало толку
/catalog/12345/а_дальше/можно_писать/что_душенька_пожелает/чисто_для_SEO
12345 это как раз ID для модулей памяти
0
otto-fukin
21 / 57 / 21
Регистрация: 15.06.2017
Сообщений: 537
22.02.2018, 23:55 #6
Цитата Сообщение от Jodah Посмотреть сообщение
Для удобства создаёте отдельное поле типа `route_cache`и храните там полный URL раздела.
тестировал как-то полный url, получилось что при длине url 255 символов, 10 уровней вложенности(т.е. 10 последовательных запросов по фрагментам url) срабатывали на порядок(!) быстрее чем один запрос по целому url используемого в качестве первичного ключа. Страниц в таблице было несколько тысяч. Понятно что длинные строки полностью не индексируются, на коротких url возможно будет эффект, но для себя я решил, что такое кеширование только усложнит роутер..
0
Jodah
Эксперт PHP
2706 / 2378 / 1013
Регистрация: 01.08.2012
Сообщений: 8,405
22.02.2018, 23:58 #7
Цитата Сообщение от otto-fukin Посмотреть сообщение
усложнит роутер..
Усложнит в смысле увеличит нагрузку?
0
otto-fukin
21 / 57 / 21
Регистрация: 15.06.2017
Сообщений: 537
23.02.2018, 00:07 #8
Цитата Сообщение от Jodah Посмотреть сообщение
Усложнит в смысле увеличит нагрузку?
Не, не нагрузку. Просто нужно будет контролировать синхронность кеша и фрагментов url для каждой страницы или раздела. Потенциальная вероятность коллизий. Мелочь конечно. Для себя решил не заморачиваться. до 100 уровней вложенности(тоже тестировал) заметно увеличение времени отклика где-то процентов на 20%. Но это уже какой-то экстрим. На практике можно не заморачиваться ни кешированием url ни количеством уровней вложенности..
0
полудух
145 / 161 / 42
Регистрация: 15.03.2016
Сообщений: 987
23.02.2018, 00:12 #9
на практике каждый следующий уровень надо выяснять - откуда он вообще и что это
а если там слово, то его просто некошерно индексировать по слову, а не по ID
0
Yourasik
1 / 1 / 6
Регистрация: 31.05.2014
Сообщений: 171
Завершенные тесты: 1
26.02.2018, 11:13  [ТС] #10
полудух, а как индексировать по id если в урл параметр - слово? Так как правильно делать, хранить до каждой записи весь урл или частично? Например : somesite.com/catalog/electronika/notebooks/macbook_pro_2012, в записи в БД, в таблице items в поле route_cache хранить /electronika/notebooks/macbook_pro_2012 или только macbook_pro_2012? Наверное надо добавить еще "_id" иначе как идентифицировать, ведь таких макбуков может быть много. Раньше я из заголовка делал ЧПУ и при помощи .htaccess (RewriteEngine On RewriteRule ^(.+)_([0-9]+)$ ?id=$2&itemm=$1 [L]) itemm ЧПУ из бд и id = id. Теперь хочу под MVC переделать, но не могу полностью собрать пазл.
0
полудух
145 / 161 / 42
Регистрация: 15.03.2016
Сообщений: 987
26.02.2018, 12:32 #11
Цитата Сообщение от Yourasik Посмотреть сообщение
Например : somesite.com/catalog/electronika/notebooks/macbook_pro_2012, в записи в БД, в таблице items в поле route_cache хранить /electronika/notebooks/macbook_pro_2012 или только macbook_pro_2012
зачем вот это всё? чё вы себе жизнь усложняете
somesite.com/catalog/12345/electornika-notebooks-macbook-pro-2012 - вот так должно быть
ну в крайнем случае вот так: somesite.com/catalog/12345-electornika-notebooks-macbook-pro-2012
12345 это ID макбука в БД, а всякие route_cache забудьте нафиг.
и чтобы его выцепить rewriteEngine не нужен, сразу в пхп
0
Yourasik
1 / 1 / 6
Регистрация: 31.05.2014
Сообщений: 171
Завершенные тесты: 1
26.02.2018, 18:35  [ТС] #12
полудух, это в бд хранить 12345-electornika-notebooks-macbook-pro-2012? Это id+ЧПУ?
0
полудух
145 / 161 / 42
Регистрация: 15.03.2016
Сообщений: 987
26.02.2018, 18:37 #13
в БД только ID нужен
0
Yourasik
1 / 1 / 6
Регистрация: 31.05.2014
Сообщений: 171
Завершенные тесты: 1
26.02.2018, 18:50  [ТС] #14
полудух, а как ссылку формировать, если в БД только id тогда будет somesite.com/catalog/12345. Или заголовок, который на кириллице переводить в процессе формирования ссылки?
0
полудух
145 / 161 / 42
Регистрация: 15.03.2016
Сообщений: 987
26.02.2018, 18:59 #15
пишите ф-ю, вы ей массив: array('catalog', 12345, 'electronika', 'notebooks', 'macbook-pro-2012'), а она вам строку
0
26.02.2018, 18:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2018, 18:59

PHP + MVC
Ну помогите начинающему понять концепцию MVC в более сложной структуре. ...

простейшая mvc
Доброго времени суток! Прочитал несколько статей по MVC.. На словах все вроде...

Литература об MVC
Здравствуйте, подскажите пожалуйста что можно прочитать про концепцию MVC?...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru